home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1996 September / JCSM Shareware Collection (JCS Distribution) (September 1996).ISO / prgtools / vndinf10.zip / STANDARD.DOC < prev    next >
Text File  |  1994-02-28  |  162KB  |  2,688 lines

  1. /*=================================================================*/
  2. /*              VENDINFO File-Format and Tools Standard            */
  3. /*                       Version 1.00, 2/28/94                     */
  4. /*                                                                 */
  5. /*  Copyright 1993-4, Rams' Island Software, Parker CO 80134-5904  */
  6. /*=================================================================*/
  7.  
  8. /*---------------------------------------- about the document -----*/
  9. /*  This "document" will probably look a bit strange to most eyes. */
  10. /*  That's because it's doing double duty.  It serves as a         */
  11. /*  human-readable standard for the file formats and tools         */
  12. /*  behavior associated with the VENDINFO system.  It also serves  */
  13. /*  as a C and C++ "include file", providing the necessary record  */
  14. /*  definitions and other information in compiler-readable form.   */
  15. /*                                                                 */
  16. /*  This unusual presentation is not being done out of laziness    */
  17. /*  (in fact, you'll notice that a fair amount of work has been    */
  18. /*  done to make the document serve both purposes well).  Rather,  */
  19. /*  it is being done in the interest of accuracy and error         */
  20. /*  minimization.  Because the compiler-readable portion of the    */
  21. /*  standard will have been verified by constructing actual tools  */
  22. /*  to create and use the records, the document should be rather   */
  23. /*  unambiguous, and free from at least some of the sorts of       */
  24. /*  errors that might have resulted from separating it into two    */
  25. /*  separate (human and compiler) parts and attempting to keep     */
  26. /*  them synchronized.                                             */
  27. /*-----------------------------------------------------------------*/
  28.  
  29. /*------------------------------------------- public standard -----*/
  30. /*  This VENDINFO standard is a copyrighted work.  That has been   */
  31. /*  done to insure that the development of the standard is well    */
  32. /*  controlled, and that multiple variations are prevented.  Many  */
  33. /*  standards in the computer industry have been damaged or        */
  34. /*  delayed by the existence of multiple, competing versions.      */
  35. /*  It is in the interest of the entire industry that we are       */
  36. /*  attempting to avoid such a development here.  This standard    */
  37. /*  has been developed "in public", with opportunities for public  */
  38. /*  comment on its general ideas and specific content.  That will  */
  39. /*  continue to be the case.                                       */
  40. /*                                                                 */
  41. /*  This standard is made available for free use by all parties,   */
  42. /*  including the development of tools other than -- or even in    */
  43. /*  competition with -- those of the developers of the standard.   */
  44. /*  This standard may also be distributed freely, provided it is   */
  45. /*  in its original form, not altered in any way.                  */
  46. /*-----------------------------------------------------------------*/
  47.  
  48. /*------------------------------------- contacting the author -----*/
  49. /*  The author can be reached in any of the following ways.        */
  50. /*                                                                 */
  51. /*  By mail:                        By electronic means:           */
  52. /*    H. Rudy Ramsey                  CompuServe: 76244,324        */
  53. /*    Rams' Island Software           FidoNet:    1:104/333        */
  54. /*    7644 E. Lakecliff Way           RIME:       RAMSISLE (1235)  */
  55. /*    Parker, CO 80134-5904 (USA)     Internet:                    */
  56. /*                                       76244.324@compuserve.com  */
  57. /*  By phone: 303-841-2848            BBS:        303-841-6269     */
  58. /*-----------------------------------------------------------------*/
  59.  
  60.                      /*****************************/
  61.                      /*        Background         */
  62.                      /*****************************/
  63.  
  64. /*------------------------------------------------ background -----*/
  65. /*  The VENDINFO system allows the author/publisher of a software  */
  66. /*  package to communicate a great deal of information to the      */
  67. /*  prospective distributors of that package.  The record          */
  68. /*  containing this information is included with the distributed   */
  69. /*  package.  The record is highly structured, compressed, and     */
  70. /*  useable via automated tools for convenience and reliability.   */
  71. /*                                                                 */
  72. /*  It is expected that the VENDINFO.DIZ record will replace the   */
  73. /*  VENDOR.DOC, SYSOP.DOC, LICENSE.DOC, WARRANTY.DOC,              */
  74. /*  SITELICE.DOC, FILE_ID.DIZ, and DESC.SDI commonly found in      */
  75. /*  shareware and public-domain software packages.  It may         */
  76. /*  eventually replace READ-ME.DOC and similar files, as well.     */
  77. /*                                                                 */
  78. /*  The VENDINFO system includes this file-format standard, which  */
  79. /*  defines the structure of the main VENDINFO.DIZ record and a    */
  80. /*  few minor related records, and it includes a number of tools   */
  81. /*  for creating and using the record.  It includes a centralized  */
  82. /*  product registry, which is a repository for VENDINFO records   */
  83. /*  and related material about currently available products.  It   */
  84. /*  also includes a software developer's library, for use in the   */
  85. /*  construction of BBS software, vendor database software, etc.   */
  86. /*                                                                 */
  87. /*  The VENDINFO system includes the following tools:              */
  88. /*    VendEdit -- Editor used by software author/publisher to      */
  89. /*                produce VENDINFO record and, if desired, to      */
  90. /*                "brand" executables with product information.    */
  91. /*    VendPrcs -- Processor used by distributor to extract, and to */
  92. /*                make decisions based on, VENDINFO information.   */
  93. /*    VendView -- VENDINFO record viewer for end users.            */
  94. /*                                                                 */
  95. /*  For more detailed information about the overall VENDINFO       */
  96. /*  concept, see the publicly distributed information package      */
  97. /*  VNDINFxx.ZIP (xx is the version number, currently 10), which   */
  98. /*  is probably available from the same source from which you      */
  99. /*  obtained this document, or contact Rams' Island Software.      */
  100. /*-----------------------------------------------------------------*/
  101.  
  102. /*----------------------------------- a comment on complexity -----*/
  103. /*  A common initial reaction to the VENDINFO file format is that  */
  104. /*  it's rather complex.  This is true.  There is a great deal of  */
  105. /*  information to be conveyed from authors to distributors and    */
  106. /*  to end users, and to pretend otherwise would be to settle for  */
  107. /*  much less than the actually achievable benefits of VENDINFO.   */
  108. /*  The key is not to strive for an artificially simple VENDINFO   */
  109. /*  record, but to surround that record with tools that make it    */
  110. /*  easy to use.  Those who have seen the toolset appear to be in  */
  111. /*  nearly unanimous agreement that this has been accomplished.    */
  112. /*-----------------------------------------------------------------*/
  113.  
  114. /*-- please ignore the next few lines; they're for the compiler ---*/
  115. #if !defined (__VENDINFO_H)     /* excludes entire file if defined */
  116.  #define __VENDINFO_H
  117.  #define  VENDINFO_VERSION          "1.00"
  118.  #define  VENDINFO_VERSION_NUMERIC  100
  119.  #define  VENDINFO_VERSION_DATE     "2/28/94"
  120.  #ifdef VENDINFO_MAIN
  121.   #define EXTERN
  122.  #else
  123.   #define EXTERN extern
  124.  #endif
  125.  
  126.                /***************************************/
  127.                /*  Conventions Used in This Standard  */
  128.                /***************************************/
  129.  
  130. /*---------------------------------------- naming conventions -----*/
  131. /*  The naming conventions used in this standard and in the        */
  132. /*  software developer's library are intended to insure that the   */
  133. /*  programmer can tell the nature of an identifier (variable      */
  134. /*  name, function, bit mask, etc.) from its name, and can also    */
  135. /*  easily recognize those identifiers that are part of VENDINFO,  */
  136. /*  to avoid confusing them with others that are part of his/her   */
  137. /*  own program.  Lexical conventions for names are:               */
  138. /*    vibName -- bit mask (where "Name" can be anything).  These   */
  139. /*               should generally be used by ANDing them with the  */
  140. /*               appropriate variable.                             */
  141. /*    vivName -- preprocessor value other than bit mask.  These    */
  142. /*               should generally be used in equality tests (e.g., */
  143. /*                "=="), or as array indexes.                      */
  144. /*    vifName -- function.                                         */
  145. /*    vidName -- data (generally, a variable in the VENDINFO       */
  146. /*               structure).                                       */
  147. /*    vimName -- preprocessor macro (used in library, not in       */
  148. /*               file-format standard per se)                      */
  149. /*    viName  -- data type used within main record (may be         */
  150. /*               structure or special use of ordinary type).       */
  151. /*-----------------------------------------------------------------*/
  152.  
  153. /*----------------------------------------- "shorthand" names -----*/
  154. /*  Each field of the VENDINFO record has associated with it both  */
  155. /*  a "shorthand" name and a data type.  The shorthand name is     */
  156. /*  intended for use in testing or extracting field values by      */
  157. /*  means of the VendPrcs processor or other such tools.  For      */
  158. /*  example, one might extract the short product name using the    */
  159. /*  DOS command:                                                   */
  160. /*       vendprcs VENDINFO.DIZ -xpp                                */
  161. /*  where "x" represents extraction, and "pp" is the shorthand     */
  162. /*  string that represents the product name field.                 */
  163. /*                                                                 */
  164. /*  The shorthand strings used to name the various fields are a    */
  165. /*  part of this standard.  Wherever a field is defined in the     */
  166. /*  later sections of this standard, a comment will contain the    */
  167. /*  shorthand name associated with the field, as well as an        */
  168. /*  indication of its data type.  For example, the product name    */
  169. /*  field definition:                                              */
  170. /*    char         vidProdName[16];      ** pp  s **               */
  171. /*  contains a comment actually shown as:                          */
  172.                                          /* pp  s */
  173. /*  This comment indicates that the shorthand name of this field   */
  174. /*  is "pp", and that it is of type "s".  Types are:               */
  175. /*       b -- boolean                                              */
  176. /*       d -- date                                                 */
  177. /*       n -- number (integer)                                     */
  178. /*       p -- price (format 99.99 or 999.99)                       */
  179. /*       s -- string (usually accessed as one line of text)        */
  180. /*       t -- text block (accessed as multiple lines of text,      */
  181. /*            each of which "behaves" as a string).  May be stored */
  182. /*            as string, string array, or "TextBlock".             */
  183. /*  Where internal structures are used, a question mark indicates  */
  184. /*  a placeholder character.  For example, in the author section,  */
  185. /*       viElectAddr  elec;              ** ae?   **               */
  186. /*  the author electronic addresses will have shorthand names      */
  187. /*  consisting of "ae", followed by an additional character found  */
  188. /*  in the documentation of the viElectAddr structure.             */
  189. /*-----------------------------------------------------------------*/
  190.  
  191.                /**************************************/
  192.                /*   VENDINFO Record and File Types   */
  193.                /**************************************/
  194.  
  195. /*----------------------------------------- VENDINFO.DIZ file -----*/
  196. /*  The main data object used in the VENDINFO system is the        */
  197. /*  VENDINFO.DIZ file.  This file contains a human-readable text   */
  198. /*  section in the front (terminated by 0x1A, also known as ^Z).   */
  199. /*  This text section contains a brief outline of major            */
  200. /*  information about the product, followed by paragraphs devoted  */
  201. /*  to information about warranty, trial use and distribution      */
  202. /*  licenses, a "packing list" of files in the package, etc.       */
  203. /*  Additional information can be provided by the author.          */
  204. /*                                                                 */
  205. /*  Following that section is a compressed data record containing  */
  206. /*  comprehensive information about the product and version,       */
  207. /*  author, ordering, technical support, prices and benefits,      */
  208. /*  and distribution policies.                                     */
  209. /*-----------------------------------------------------------------*/
  210.  
  211. /*------------------------------- secondary VENDINFO.DIZ file -----*/
  212. /*  In multipart products (i.e., products packaged in more than    */
  213. /*  one compressed file), only the first package contains a        */
  214. /*  complete VENDINFO.DIZ file.  Subsequent parts contain a        */
  215. /*  complete data record (to allow independent automatic           */
  216. /*  processing of each package), but highly abbreviated human-     */
  217. /*  readable text.                                                 */
  218. /*-----------------------------------------------------------------*/
  219.  
  220. /*---------------------------------- brief executable records -----*/
  221. /*  The VendEdit editor will have the capability of appending, to  */
  222. /*  executable programs, a brief VENDINFO record.  This record     */
  223. /*  will contain minimal product/version/author information and    */
  224. /*  either an abbreviated or a comprehensive distribution policy   */
  225. /*  section, all highly compressed for efficiency.  This would     */
  226. /*  allow, for example, automated detection of retail software,    */
  227. /*  registered versions, etc., if they showed up in BBS uploads,   */
  228. /*  CD-ROMs, and so on.                                            */
  229. /*                                                                 */
  230. /*  The VendPrcs processor will automatically check the            */
  231. /*  executables in a package for appropriate distribution          */
  232. /*  policies, if desired.                                          */
  233. /*-----------------------------------------------------------------*/
  234.  
  235.            /*   VENDINFO Record and File Types (cont.)  */
  236.  
  237. /*--------------------------------------- intermediate record -----*/
  238. /*  The VendEdit editor, and any similar program for creating      */
  239. /*  VENDINFO records, will maintain information about the product  */
  240. /*  in the form of an "intermediate" record, rather than in the    */
  241. /*  form of an actual VENDINFO.DIZ record.  This is necessary      */
  242. /*  for several reasons:                                           */
  243. /*     1. The  editor needs more information than is actually in   */
  244. /*        the VENDINFO.DIZ record itself.                          */
  245. /*     2, Multiple VENDINFO files may be produced from a single    */
  246. /*        intermediate record.                                     */
  247. /*     3. Portions of the VENDINFO.DIZ record are produced         */
  248. /*        automatically from other portions of the record.         */
  249. /*     4. It helps discourage hacking of VENDINFO.DIZ records if   */
  250. /*        the (readily available) editor that produces them cannot */
  251. /*        be used to modify them.                                  */
  252. /*  The exact content of an intermediate record would vary from    */
  253. /*  editor to editor, and is beyond the scope of this standard.    */
  254. /*  As an aid to developers, however, provision has been made in   */
  255. /*  the file-format standard for marking a particular VENDINFO     */
  256. /*  record as of "intermediate" type.  This would allow an editor  */
  257. /*  to utilize the standard uncompressed form of the VENDINFO      */
  258. /*  record as the first section of its intermediate record.        */
  259. /*-----------------------------------------------------------------*/
  260.  
  261.              /******************************************/
  262.              /*  Structure of the VENDINFO.DIZ Record  */
  263.              /******************************************/
  264.  
  265. /*----------------------- overall VENDINFO.DIZ file structure -----*/
  266. /*  The VENDINFO.DIZ file has the following components:            */
  267. /*                                                                 */
  268. /*     1. A readable text portion of indeterminate length,         */
  269. /*        terminated by a 0x1A (^Z) character.  This portion is    */
  270. /*        intended primarily for human consumption, but some       */
  271. /*        automated uses can be made of it.  For that reason, and  */
  272. /*        because of its legal significance in conveying trial-use */
  273. /*        and distribution rights, some properties of its internal */
  274. /*        structure are covered by this standard.                  */
  275. /*                                                                 */
  276. /*     2. A compressed data record, whose structure and content    */
  277. /*        are defined in this standard.  The compressed form of    */
  278. /*        this record is exactly that which would be produced if   */
  279. /*        it were a standalone ZIP compressed file containing one  */
  280. /*        single file ("VENDDATA.") compressed using PKZIP 1.10    */
  281. /*        algorithms as implemented in TurboPower's Asynch for C++ */
  282. /*        library.                                                 */
  283. /*-----------------------------------------------------------------*/
  284.  
  285. /*---------- internal structure of the compressed data record -----*/
  286. /*  When uncompressed, the VENDINFO data record consists of two    */
  287. /*  parts:                                                         */
  288. /*                                                                 */
  289. /*     1. A fixed length record of type viVendinfoRecord, defined  */
  290. /*        below.                                                   */
  291. /*                                                                 */
  292. /*     2. Zero or more "record extensions", which are optional     */
  293. /*        additional records within the compression envelope, also */
  294. /*        defined below.                                           */
  295. /*-----------------------------------------------------------------*/
  296.  
  297. /*---------------------------- a comment on space utilization -----*/
  298. /*  The VENDINFO record contains many optional fields for which    */
  299. /*  fixed-length portions of the record have been allocated.  A    */
  300. /*  common initial reaction is that this is wasteful of space.     */
  301. /*  Please note, however, that fixed-length fields are easier to   */
  302. /*  use, and that any wasted space is actually reclaimed by the    */
  303. /*  compression algorithm.  Tools that create VENDINFO records are */
  304. /*  required to place zero (null) characters in all unused bytes.  */
  305. /*  As a result, the compression algorithm will be MORE effective  */
  306. /*  at avoiding waste than a variable-length record could be.      */
  307. /*-----------------------------------------------------------------*/
  308.  
  309.      /*************************************************************/
  310.      /*  Human-Readable Text Portion of the  VENDINFO.DIZ Record  */
  311.      /*************************************************************/
  312.  
  313. /*------------------------- overall structure of text portion -----*/
  314. /*  The text portion of the VENDINFO.DIZ record is intended to be  */
  315. /*  read by humans, though it also contains structure and format   */
  316. /*  constraints that allow limited use of its content by automated */
  317. /*  tools, which operate by searching for, and perhaps parsing,    */
  318. /*  specified text.  The text portion contains a VENDINFO          */
  319. /*  information header, which has an exact specified text, with    */
  320. /*  minor possible variations, followed by a generation line       */
  321. /*  indicating how and when this particular VENDINFO record was    */
  322. /*  created.  Then a series of sections appear, some created       */
  323. /*  automatically and some by user input, some mandatory and some  */
  324. /*  optional.  Each is preceded by a section label.  The details   */
  325. /*  of all these sections are presented below.  Text lines in the  */
  326. /*  readable front sections may not exceed 73 characters in width, */
  327. /*  and may not contain tabs.                                      */
  328. /*-----------------------------------------------------------------*/
  329.  
  330. /*------------------------------- VENDINFO information header -----*/
  331. /*  It will frequently happen that a user or distributor will      */
  332. /*  encounter the VENDINFO system for the first time by actually   */
  333. /*  receiving a package with a VENDINFO.DIZ record in it.  It is   */
  334. /*  important that the human-readable portion of the record begin  */
  335. /*  with sufficient information about VENDINFO, and about          */
  336. /*  obtaining the VENDINFO toolset, that the recipient is able to  */
  337. /*  make full, effective use of the system.  Accordingly, each     */
  338. /*  VENDINFO record will begin with the exact text shown below,    */
  339. /*  except that a developer of an alternative VENDINFO record      */
  340. /*  creation tool may add an additional paragraph at the end,      */
  341. /*  without removing any of the indicated text, and consistent in  */
  342. /*  style, format, and layout with the information already there.  */
  343. /*  This paragraph will allow the developer to advertise the       */
  344. /*  availability of his own tools.                                 */
  345. /*                                                                 */
  346. /*  If, and only if, the developer offers a complete set of        */
  347. /*  VENDINFO tools, compliant with the standard and comparable in  */
  348. /*  features and quality to VendEdit, VendPrcs, and VendView, then */
  349. /*  the reference to Rams' Island Software can be removed.         */
  350. /*  Otherwise, the reference must remain in order to allow users   */
  351. /*  to find the necessary tools.                                   */
  352. /*-----------------------------------------------------------------**
  353. ┌────────────────────────────────────────────────────────────────────┐
  354. │          VENDINFO Product Distribution Information Record          │
  355. │                                                                    │
  356. │ This record is a means of conveying information about a software   │
  357. │ product from the author to distributors and users.  It contains a  │
  358. │ normal, "human-readable" section (you're reading it now), followed │
  359. │ by a compressed data record.  The data record contains a great     │
  360. │ deal of information in a form useable by automated tools.  This    │
  361. │ allows BBSes, disk vendors, etc. to automatically test for         │
  362. │ permission to distribute, and to automatically extract product     │
  363. │ information for use in BBS files databases, vendor catalogs, etc.  │
  364. │                                                                    │
  365. │ The VENDINFO file standard is published and freely useable.        │
  366. │                                                                    │
  367. │ The VENDINFO toolset includes a free end-user viewer, processing   │
  368. │ tools for use by distributors (BBSes, shareware disk vendors,      │
  369. │ etc.), and the editor used by author/publishers to produce these   │
  370. │ records.  These tools are either free or low cost shareware.       │
  371. │ The toolset can be obtained from many sources, including the       │
  372. │ originators of VENDINFO:                                           │
  373. │                                                                    │
  374. │ Rams' Island Software   Voice: 303-841-2848  CompuServe: 76244,324 │
  375. │ 7644 E. Lakecliff Way     BBS: 303-841-6269     FidoNet: 1:104/333 │
  376. │ Parker, CO 80134-5904 USA                          RIME: RAMSISLE  │
  377. └────────────────────────────────────────────────────────────────────┘
  378.  
  379.               **  Human-Readable Text Portion (cont.) **
  380.  
  381. **---------------------------------- VENDINFO generation line -----*/
  382. /*  The next line following the header box, just above, will       */
  383. /*  indicate the version number of the VENDINFO standard used to   */
  384. /*  construct the record, the tool used to create it (and its      */
  385. /*  version number), and the date of creation.  The format must be */
  386. /*  exactly as shown, except for substitution of version numbers,  */
  387. /*  tool name (one word), and creation date.                       */
  388. /*-----------------------------------------------------------------**
  389. VENDINFO standard v1.00, produced by VendEdit v1.10, 12-Jun-93
  390.  
  391. **--------------------------- secondary record identification -----*/
  392. /*  In "secondary" VENDINFO files (in multipart products, the      */
  393. /*  VENDINFO.DIZ files in packages after the first, are secondary  */
  394. /*  files), some portions of the human-readable section are        */
  395. /*  omitted.  To warn the reader when this occurs, the following   */
  396. /*  text is added.                                                 */
  397. /*-----------------------------------------------------------------**
  398. ┌────────────────────────────────────────────────────────────────────┐
  399. │ Because this is not the primary package of this multi-package      │
  400. │ product, the readable-text portion of this VENDINFO record is      │
  401. │ somewhat abbreviated.  For complete information, see the VENDINFO  │
  402. │ file in the first package listed below under "Required Packages".  │
  403. └────────────────────────────────────────────────────────────────────┘
  404.  
  405. **------------------------------ standards for section labels -----*/
  406. /*  Section labels must be displayed exactly as shown in the       */
  407. /*  respective sections below, including the five equal-sign ('=') */
  408. /*  characters and a space before the label, and a space and at    */
  409. /*  least five equal-sign characters after the label.  The         */
  410. /*  spelling and capitalization of the labels must be exactly as   */
  411. /*  shown.  This will allow various automated tools to find the    */
  412. /*  relevant sections.  If additional sections are desired using   */
  413. /*  labels other than those shown here, those sections should      */
  414. /*  appear in the location indicated for "other information", and  */
  415. /*  their labels should be in the same format, but using the       */
  416. /*  minus ('-') character in place of the equal-sign character.    */
  417. /*  Each section label is preceded by two blank lines.  No lines   */
  418. /*  of text, other than section headings, should begin with        */
  419. /*  "===== " or "----- ".                                          */
  420. /*-----------------------------------------------------------------*/
  421.  
  422.               /*  Human-Readable Text Portion (cont.) */
  423.  
  424. /*------------------------------- product information section -----*/
  425. /*  The "Product Information" section should contain enough basic  */
  426. /*  information about the product to allow the end-user or         */
  427. /*  distributor to determine the program's relevance, and to allow */
  428. /*  the end-user to order the product or obtain technical support  */
  429. /*  for it.  The information content of this section is not rigid. */
  430. /*  An example is shown below.  In a "secondary" VENDINFO.DIZ      */
  431. /*  file, this section might be somewhat briefer.                  */
  432. /*-----------------------------------------------------------------**
  433. ===== Product Information ============================================
  434.    Product:             InContext Work Environment Manager
  435.    Version:             1.10
  436.    Version Date:        31-Jan-1993
  437.    Product Type:        Software
  438.    Basic Distribution Policy (see License, below, for details):
  439.       
  440.  
  441.    Product Description: InContext(TM) Work Environment Manager V1.10 
  442.                         (1 of 2) <ASP>. Complete Work Environment 
  443.                         Manager for expert PC users. Automates more 
  444.                         Aspects of the PC user's work than any other 
  445.                         product. Designed by a PhD ergonomist, it is 
  446.                         based on fundamental principles of how people
  447.                         actually work. Much more than a DOS shell. 
  448.                         NEW VERSION 1.10 has Gantt charts, multi-file
  449.                         tagging, 4DOS long descriptions, PKZIP 2.04 
  450.                         support, *many* new features. 
  451.  
  452.    Category:            Work environment managers
  453.    Keywords:            Work Environment Manager Object Oriented DOS 
  454.                         Shell Calendar Project
  455.    Required Packages:   INCXT11A INCXT11B
  456.    This Package:        INCXT11A
  457.  
  458.    Required Configuration
  459.       Processor Family: Intel 80x86 (minimum 8086/8088)
  460.       Minimum OS:       MS-DOS 3.0
  461.       Standard RAM:     512K
  462.       Hard Drive Space: 1000K
  463.       Required:         Hard drive
  464.          Keyboard
  465.       Won't Work With:
  466.          Floppy only
  467.  
  468.    Orders:           Rams' Island Software
  469.                      7644 E. Lakecliff Way
  470.                      Parker, CO  80134-5904
  471.                      USA
  472.       Phone:            303-841-2848
  473.       BBS Name:         Rams' Island BBS
  474.       BBS Phone:        303-841-2848
  475.       CompuServe:       76244,324
  476.       FidoNet:          1:104/333
  477.       Internet:         76244.324@compuserve.com
  478.       RIME:             RAMSISLE
  479.  
  480.    Support:          Rams' Island Software
  481.                      7644 E. Lakecliff Way
  482.                      Parker, CO  80134-5904
  483.                      USA
  484.       Phone:            303-841-2848
  485.       BBS Name:         Rams' Island BBS
  486.       BBS Phone:        303-841-2848
  487.       CompuServe:       76244,324
  488.       FidoNet:          1:104/333
  489.       Internet:         76244.324@compuserve.com
  490.       RIME:             RAMSISLE
  491.  
  492.  
  493.               **  Human-Readable Text Portion (cont.) **
  494.  
  495. **------------------------- information for users ("read-me") -----*/
  496. /*  This is an optional section which can be provided by the       */
  497. /*  author.  This allows the author to fully replace the "READ-ME" */
  498. /*  file with VENDINFO (though a single-line READ-ME.DOC file      */
  499. /*  pointing to VENDINFO.DIZ would probably be wise until folks    */
  500. /*  become accustomed to VENDINFO).  The content of this section   */
  501. /*  is entirely up to the author, except that it should not        */
  502. /*  contain information already covered in the required sections   */
  503. /*  of VENDINFO.  This section begins with the standard label      */
  504. /*  'Information for Users ("READ-ME")'.  This section is omitted  */
  505. /*  from secondary VENDINFO files.                                 */
  506. /*-----------------------------------------------------------------*/
  507.  
  508. /*-------------------------------------- packing list section -----*/
  509. /*  This section ("Packing List") must be automatically generated  */
  510. /*  by any VENDINFO-record creation tool.  It lists the files in   */
  511. /*  the original package as created by the author, including file  */
  512. /*  names, date/time stamps, and CRCs.  This section must conform  */
  513. /*  EXACTLY to the format shown by example below, in order to      */
  514. /*  allow automatic detection of changes to the package.           */
  515. /*-----------------------------------------------------------------**
  516.  
  517. ===== Packing List ===================================================
  518.  
  519. As released by the author or publisher, this package contained the
  520. following files in addition to this VENDINFO.DIZ:
  521.  
  522.         Filename      Size     Date       Time     CRC32
  523.       FILE_ID.DIZ      448  31-Jan-1993  01:10a   417A9DED
  524.      REGISTER.DOC    16396  31-Jan-1993  01:10a   481DB182
  525.      WHATSNEW.DOC     7509  31-Jan-1993  01:10a   4A1DD6BC
  526.       INSTALL.EXE    68291  31-Jan-1993  01:10a   9DD141C9
  527.           LHA.EXE    34283  20-Jul-1991  02:13a   2C68A172
  528.      INC-DOCS.LZH   130623  31-Jan-1993  01:10a   7138B4FC
  529.  
  530. **---------------------------------------------- installation -----*/
  531. /*  This optional section ("Installation") allows the author to    */
  532. /*  include installation instructions for the product.  This       */
  533. /*  section is omitted from secondary VENDINFO files.              */
  534. /*-----------------------------------------------------------------*/
  535.  
  536. /*----------------------------------------- other information -----*/
  537. /*  This optional section ("Other Information", or other sections  */
  538. /*  named by the author using "-" section labels) allows the       */
  539. /*  author to include any other desired information, such as       */
  540. /*  advertisements for other products.  These sections are omitted */
  541. /*  from secondary VENDINFO files.                                 */
  542. /*-----------------------------------------------------------------*/
  543.  
  544. /*-------------------------------------------------- warranty -----*/
  545. /*  The "Warranty" section is optional, but should appear in all   */
  546. /*  VENDINFO files describing software products.  (Such a section  */
  547. /*  MIGHT be omitted for, say, clip art.)  The warranty should be  */
  548. /*  prepared by the author with appropriate legal study or advice. */
  549. /*  The warranty indicates -- and in many cases limits -- the      */
  550. /*  liability accepted by the author or publisher regarding the    */
  551. /*  product.  This section is omitted from secondary VENDINFO      */
  552. /*  files.                                                         */
  553. /*-----------------------------------------------------------------*/
  554.  
  555.               /*  Human-Readable Text Portion (cont.) */
  556.  
  557. /*-------------------------- license for use and distribution -----*/
  558. /*  The "License for Use and Distribution" section is optional,    */
  559. /*  but should appear in virtually all uses of VENDINFO.  The      */
  560. /*  license grants limited (or unlimited, for public-domain        */
  561. /*  products) rights to use and distribute the product, under      */
  562. /*  conditions specified by the author.  In the case of shareware  */
  563. /*  with distribution restrictions, this section should            */
  564. /*  "incorporate by reference" the distribution restrictions       */
  565. /*  described in the attached compressed data record.  It is       */
  566. /*  undesirable to also list the distribution rights and           */
  567. /*  restrictions in text form here, since that raises the issue of */
  568. /*  possible inconsistencies and weakens the ability of the        */
  569. /*  distributor to rely upon automated processing of the data      */
  570. /*  record for the conveyance of these distribution rights.        */
  571. /*-----------------------------------------------------------------*/
  572.  
  573.                  /************************************/
  574.                  /*  Legal and License Requirements  */
  575.                  /************************************/
  576.  
  577. /*--------------------------------------------- legal matters -----*/
  578. /* Part of the design of the VENDINFO system involves establishing */
  579. /* the necessary legal and licensing conditions so that authors    */
  580. /* and distributors will have common understandings on which they  */
  581. /* may rely.  For example, it is necessary that the author's       */
  582. /* distribution license allow the distributor to use automated     */
  583. /* tools to determine distribution permissions, without reading    */
  584. /* text of the distribution license (unless the automated tool     */
  585. /* detects that such reading has been required by the author).     */
  586. /* If this requirement is not forced on the author, then           */
  587. /* distributors everywhere will still be reading text licenses,    */
  588. /* defeating one of the important goals of the VENDINFO system.    */
  589. /*                                                                 */
  590. /* To provide for this and other similar common understandings,    */
  591. /* it is necessary that certain VENDINFO-related tools carry       */
  592. /* specified provisions in their own license agreements.  Thus, we */
  593. /* have the following unusual situation:  This standard requires,  */
  594. /* as a condition of tools compliance, that certain VENDINFO-      */
  595. /* related tools carry, in their usage licenses, specific          */
  596. /* provisions.  Those provisions will, in general, have the effect */
  597. /* of forcing the users of the tools to agree to the legal         */
  598. /* conditions underlying the VENDINFO system.  One of those        */
  599. /* conditions will be that products distributed with VENDINFO.DIZ  */
  600. /* files will carry, in THEIR distribution licenses, specified     */
  601. /* provisions.  Legally, all this is a bit unusual, but it is not  */
  602. /* really complicated.  There are simply several levels involved.  */
  603. /* Listed below are the conditions that specific types of VENDINFO */
  604. /* tools must satisfy.                                             */
  605. /*                                                                 */
  606. /* Any VENDINFO editor, which produces VENDINFO.DIZ files for      */
  607. /* distribution with products, must contain the following text in  */
  608. /* its License for Use:                                            */
  609. /*                                                                 */
  610. /*  'A fundamental goal of the VENDINFO system is that             */
  611. /*   distributors must be able to rely upon automated testing to   */
  612. /*   determine whether or not they may distribute your products.   */
  613. /*   Therefore, any VENDINFO file which is distributed with your   */
  614. /*   products must satisfy these conditions:                       */
  615. /*                                                                 */
  616. /*     It must be an "authenticated" file, containing valid        */
  617. /*     authentication codes issued to you under your company name, */
  618. /*     or a company name you are authorized to use for this        */
  619. /*     purpose.                                                    */
  620. /*                                                                 */
  621. /*     The "License for Use and Distribution" section must contain */
  622. /*     the actual text of your license agreement, rather than a    */
  623. /*     pointer to some other document, and must include the        */
  624. /*     following statements or their equivalent: "The attached     */
  625. /*     VENDINFO data record is hereby incorporated by reference.   */
  626. /*     Any distribution satisfying all the distribution            */
  627. /*     requirements expressed in that data record is hereby        */
  628. /*     authorized." (This means that distributors will NOT have to */
  629. /*     consult the "License for Use and Distribution" text itself, */
  630. /*     UNLESS you select "See Attached Text for Additional         */
  631. /*     Requirements" in the data record.)                          */
  632.  
  633.             /*  Legal and License Requirements (cont.) */
  634.  
  635. /*   The distributor also needs to be able to use the information  */
  636. /*   you provide in the VENDINFO record without worrying about     */
  637. /*   violating your copyright on the descriptions therein.  As a   */
  638. /*   condition of use of <editor name>, you also agree that every  */
  639. /*   distributor shall have the benefit of this understanding:     */
  640. /*                                                                 */
  641. /*     If the distributor satisfies your conditions for            */
  642. /*     distributing the product, you authorize the distributor's   */
  643. /*     use of your unaltered product descriptive texts without     */
  644. /*     further permission.                                         */
  645. /*                                                                 */
  646. /*   Finally, to keep any license disputes strictly between you    */
  647. /*   and the distributor, you agree to this understanding:         */
  648. /*                                                                 */
  649. /*     All licenses to distribute package are solely between the   */
  650. /*     producer and distributor, and do not involve VENDINFO,      */
  651. /*     Rams' Island Software (originator of VENDINFO) or           */
  652. /*     <name of publisher of editor>.'                             */
  653. /*                                                                 */
  654. /* Any VENDINFO processor, which purports to test VENDINFO.DIZ     */
  655. /* files or related artifacts for the purpose of determining       */
  656. /* permission to distribute products, must contain the following   */
  657. /* text in its License for Use:                                    */
  658. /*                                                                 */
  659. /*  'It is important that producers not forfeit any legal or       */
  660. /*   copyright protections by making their distribution policy     */
  661. /*   available to you in VENDINFO form.  As a condition of use of  */
  662. /*   VendPrcs, you agree that every such producer shall have the   */
  663. /*   benefit of these understandings:                              */
  664. /*                                                                 */
  665. /*     All rights not expressly granted are reserved to the        */
  666. /*     producer.  Distribution of the product is expressly         */
  667. /*     prohibited, except as specifically authorized by the        */
  668. /*     producer.                                                   */
  669. /*                                                                 */
  670. /*     The producer may revoke any permissions granted you, by     */
  671. /*     notifying you in writing.                                   */
  672. /*                                                                 */
  673. /*   Finally, to keep any license disputes strictly between you    */
  674. /*   and the author, you agree to this understanding:              */
  675. /*                                                                 */
  676. /*     All licenses to distribute package are solely between the   */
  677. /*     producer and distributor, and do not involve VENDINFO,      */
  678. /*     Rams' Island Software (originator of VENDINFO) or           */
  679. /*     <name of publisher of <processor>.'                         */
  680. /*                                                                 */
  681. /*  Note that no license requirements are levied on VENDINFO file  */
  682. /*  processors that only extract information from VENDINFO files,  */
  683. /*  but that do not perform distribution-permission tests.         */
  684. /*-----------------------------------------------------------------*/
  685.  
  686.                    /********************************/
  687.                    /*  Data Types and Structures   */
  688.                    /*  Used as Building Blocks in  */
  689.                    /*  Later Record Definitions    */
  690.                    /********************************/
  691.  
  692. /*--------------------------------------------------- comment -----*/
  693. /*  Because some C compilers can't handle forward references, it   */
  694. /*  is necessary to define all special data structures here, ahead */
  695. /*  of the place in the main record structure at which they're     */
  696. /*  used.  The human reader of this file-format description may    */
  697. /*  wish to skip past this "Data Types and Structures" section on  */
  698. /*  first reading, returning to it only as the special structures  */
  699. /*  are encountered in the description of the main record.         */
  700. /*-----------------------------------------------------------------*/
  701.  
  702. /*------------------------------------------ byte, word, long -----*/
  703. /*  A byte is an (eight-bit) data unit such as is ordinarily used  */
  704. /*  to store an ASCII character or similar unsigned information.   */
  705. /*                                                                 */
  706. /*  A word consists of two adjacent bytes, stored low-byte-first,  */
  707. /*  as is normal on an Intel 80x86 processor.                      */
  708. /*                                                                 */
  709. /*  A long consists of two adjacent words, stored low-word-first,  */
  710. /*  as is normal on an Intel 80x86 processor.                      */
  711. /*                                                                 */
  712. /*  A character string consists of a specified number of adjacent  */
  713. /*  characters, terminated by a null (0x00).  For example the      */
  714. /*  specification:                                                 */
  715. /*       char         vidProdName[16];                             */
  716. /*  indicates that vidProdName is a 16-character text string, in   */
  717. /*  which one character position will contain a null termination   */
  718. /*  character.  Whenever a character string is used to hold a list */
  719. /*  of items, the list is blank-delimited (e.g., "PCX CGM FLM").   */
  720. /*                                                                 */
  721. /*  For some fields, an array of strings is used.  For example,    */
  722. /*       char         vidCompanyAddress[5][31];                    */
  723. /*  defines vidCompanyAddress as an array consisting of five       */
  724. /*  strings (i.e., five lines of text).  Each string is 31         */
  725. /*  characters long, including the terminating null.               */
  726. /*                                                                 */
  727. /*  The "typedef" statements below are defined as appropriate for  */
  728. /*  a standard C compiler used in an IBM PC (Intel 80x86)          */
  729. /*  environment.                                                   */
  730. /*-----------------------------------------------------------------*/
  731. typedef unsigned char byte;
  732. typedef unsigned int  word;
  733.  
  734.               /*  Data Types and Structures (cont.)   */
  735.  
  736. /*------------------------------------------------ date, time -----*/
  737. /*  Dates are stored in the form in which file dates are stored by */
  738. /*  MS-DOS.  That is, dates are words with the following layout:   */
  739. /*       FEDCBA98 76543210                                         */
  740. /*       xxxxxxx. ........     year - 1980                         */
  741. /*       .......x xxx.....     month (Jan = 1)                     */
  742. /*       ........ ...xxxxx     day of month (1st = 1)              */
  743. /*                                                                 */
  744. /*  To minimize confusion among various human-readable date        */
  745. /*  formats, dates which are displayed in the human-readable text  */
  746. /*  section of the VENDINFO record will be shown in the format:    */
  747. /*       28-Jun-1993                                               */
  748. /*  where the months of the year are:                              */
  749. /*       Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec           */
  750. /*                                                                 */
  751. /*  At present, no times are stored in the compressed data record. */
  752. /*  Times shown in the human-readable text section will be         */
  753. /*  displayed using leading zeroes and AM or PM indicators, to     */
  754. /*  eliminate ambiguity:                                           */
  755. /*       01:10a                                                    */
  756. /*-----------------------------------------------------------------*/
  757. typedef word          Date;
  758.  
  759. /*---------------------------------------------------- prices -----*/
  760. /*  Prices (registration, shipping and handling, etc.) are all     */
  761. /*  specified in a currency identified in the vidPriceWhatCurrency */
  762. /*  field.  The prices themselves are stored as longs, but are     */
  763. /*  interpreted as hundredths of a currency unit.  For example,    */
  764. /*  if the currency is US dollars, the price field would actually  */
  765. /*  contain the price in US cents.  Tools are expected to perform  */
  766. /*  the appropriate division, or provide an appropriately placed   */
  767. /*  decimal point.  Doing it this way eliminates all need for      */
  768. /*  floating point arithmetic in VENDINFO tools.                   */
  769. /*-----------------------------------------------------------------*/
  770. typedef long          Price;
  771.  
  772.               /*  Data Types and Structures (cont.)   */
  773.  
  774. /*=================================================================*/
  775. /*          TextBlock used to store paragraph-type text            */
  776. /*=================================================================*/
  777.  
  778. /*----------------------------------------- typedef TextBlock -----*/
  779. /*  The TextBlock is used to store blocks of text.  From the point */
  780. /*  of view of the record structure, a TextBlock[81] is simply an  */
  781. /*  81-byte character string, just like char[81].  However, the    */
  782. /*  TextBlock is subject to some rules that make its use by both   */
  783. /*  record-creating and record-using software slightly special.    */
  784. /*                                                                 */
  785. /*  The product descriptions and other TextBlocks in the VENDINFO  */
  786. /*  record are intended to be used by software which will, in      */
  787. /*  general, provide its own formatting, and may rearrange the     */
  788. /*  text, breaking lines at different places, etc.  The resulting  */
  789. /*  reformatted text may be printed in catalogs, used in BBS file  */
  790. /*  descriptions, etc.  Accordingly, the text may contain no other */
  791. /*  characters outside the normal ASCII printable set.  Thus, the  */
  792. /*  user will be prevented from entering text here that is in the  */
  793. /*  high-ASCII character set (above 0xFF) or below the normal      */
  794. /*  printable set (0x30).                                          */
  795. /*                                                                 */
  796. /*  Please notice in particular that a TextBlock might or might    */
  797. /*  not contain carriage return/line feed sequences (word wrapping */
  798. /*  is done at the time of extraction from the record), and that   */
  799. /*  it is normally terminated by a 0x1A (^Z) character.  When      */
  800. /*  empty, it might be terminated by either 0x1A or by a 0x00      */
  801. /*  byte.                                                          */
  802. /*-----------------------------------------------------------------*/
  803. typedef char          TextBlock;
  804.  
  805.               /*  Data Types and Structures (cont.)   */
  806.  
  807. /*=================================================================*/
  808. /*          Field lengths for string and TextBlock fields          */
  809. /*=================================================================*/
  810. /*----- common string lengths -----------------*/
  811. #define  vivLenAddress                 31
  812. #define  vivLenPhone                   20
  813. #define  vivLenPrefix                  9
  814. #define  vivLenMisc1                   81
  815. #define  vivLenMisc2                   161
  816. #define  vivLenMisc3                   241
  817. #define  vivLenName                    41
  818.  
  819. /*----- product information -------------------*/
  820. #define  vivLenProdVers                5
  821. #define  vivLenCisList                 63
  822. #define  vivLenShotTypes               24
  823. #define  vivLenDesc1                   61
  824. #define  vivLenDesc2                   121
  825. #define  vivLenDesc3                   251
  826. #define  vivLenDesc4                   451
  827. #define  vivLenDesc5                   751
  828. #define  vivLenDesc6                   1501
  829.  
  830. /*----- prices information --------------------*/
  831. #define  vivLenCurrency                21
  832.  
  833. /*----- electronic addresses ------------------*/
  834. #define  vivLenBbsName                 31
  835. #define  vivLenBbsUserName             31
  836. #define  vivLenAmericaOnLine           11
  837. #define  vivLenCompuserve              13
  838. #define  vivLenDelphi                   15
  839. #define  vivLenGenie                       13
  840. #define  vivLenProdigy                 8
  841. #define  vivLenFidonet                 20
  842. #define  vivLenInternet                   81
  843. #define  vivLenRime                    13
  844.  
  845.               /*  Data Types and Structures (cont.)   */
  846.  
  847. /*=================================================================*/
  848. /*          Platform definitions (hardware/software)               */
  849. /*=================================================================*/
  850.  
  851. /*---------------------------------------- typedef viPlatform -----*/
  852. /*  This structure holds information about a particular            */
  853. /*  hardware/software platform.  The VENDINFO record contains two  */
  854. /*  of these structures, representing the minimal requirements of  */
  855. /*  the product, and the recommended configuration.                */
  856. /*                                                                 */
  857. /*  Notice that the vidPlatRam... variables indicate QUANTITIES of */
  858. /*  memory (standard, EMS, Extended, XMS).  In addition, there are */
  859. /*  several "Features" below (vidPlatFeatRam...) that affect the   */
  860. /*  interpretation of these quantities.                            */
  861. /*                                                                 */
  862. /*  The vidPlatDisk... variables indicate the amount of disk space */
  863. /*  required/recommended for a minimal installation and for a full */
  864. /*  installation of the product.  For most products, these values  */
  865. /*  will be identical.                                             */
  866. /*-----------------------------------------------------------------*/
  867. #define  vivPlatCpuCount               8
  868. #define  vivPlatOsCount                10
  869. typedef struct {
  870.    long         vidPlatCpu [ vivPlatCpuCount ];          /* p?c  s */
  871.    word         vidPlatClockSpeedMhz;                    /* p?s  n */
  872.    long         vidPlatOpSys [ vivPlatOsCount ];         /* p?o  s */
  873.    word         vidPlatRamStdKb;                         /* p?rs n */
  874.    word         vidPlatRamEmsKb;                         /* p?rm n */
  875.    word         vidPlatRamExtKb;                         /* p?re n */
  876.    word         vidPlatRamXmsKb;                         /* p?rx n */
  877.    word         vidPlatDiskMinKb;                        /* p?dm n */
  878.    word         vidPlatDiskFullKb;                       /* p?df n */
  879. } viPlatform;      /* 9 fields, 86 bytes */
  880.  
  881. /*--------------------------------------------- platform: CPU -----*/
  882. /*  The platform structure contains 8 words of storage dedicated   */
  883. /*  to specification of a single CPU.  Most of this storage is     */
  884. /*  presently unallocated, in order to allow handling of new       */
  885. /*  machines prior to publication of the next version of this      */
  886. /*  standard.  In general, exactly one bit of this 8-word area     */
  887. /*  will be set to 1.  If the required/recommended platform        */
  888. /*  involves a CPU not on (even the extended) list, zero bits will */
  889. /*  be set, and the required CPU should be indicated in the        */
  890. /*  "catch-all" text field, vidProdOtherRequirements.  If no CPU   */
  891. /*  is relevant (e.g., the product is a book), zero bits will be   */
  892. /*  be set, as well.                                               */
  893. /*-----------------------------------------------------------------*/
  894. #define  vivPlatCpuIntelPC                0
  895. #define  vivPlatCpuMacintosh              1
  896. #define  vivPlatCpuAppleII                2
  897. #define  vivPlatCpuUnalloc3               3
  898. #define  vivPlatCpuUnalloc4               4
  899. #define  vivPlatCpuUnalloc5               5
  900. #define  vivPlatCpuUnalloc6               6
  901. #define  vivPlatCpuUnalloc7               7
  902.  
  903.          /*  Data Types and Structures (Platforms, cont.)   */
  904.  
  905. /*--------------------------- Intel 80x86 -----*/
  906. #define  vibPlatCpu808x                   0x0001
  907. #define  vibPlatCpu80286                  0x0002
  908. #define  vibPlatCpu80386                  0x0004
  909. #define  vibPlatCpu80486                  0x0008
  910. #define  vibPlatCpuPentium                0x0010
  911.  
  912. /*--------------------------- Macintosh -------*/
  913. #define  vibPlatCpuMac68000               0x0001
  914. #define  vibPlatCpuMac68020               0x0002
  915. #define  vibPlatCpuMac68030               0x0004
  916. #define  vibPlatCpuMac68040               0x0008
  917. #define  vibPlatCpuMacPowerPC             0x0010
  918.  
  919. /*--------------------------- AppleII ---------*/
  920. #define  vibPlatCpuAp2                    0x0001
  921. #define  vibPlatCpuAp2Plus                0x0002
  922. #define  vibPlatCpuAp2e                   0x0004
  923. #define  vibPlatCpuAp2eEnhanced           0x0008
  924. #define  vibPlatCpuAp2c                   0x0010
  925. #define  vibPlatCpuAp2cPlus               0x0020
  926. #define  vibPlatCpuAp2gsRom0              0x0040
  927. #define  vibPlatCpuAp2gsRom1              0x0080
  928. #define  vibPlatCpuAp2gsRom3              0x0100
  929.  
  930. /*---------------------------------------------- platform: OS -----*/
  931. /*  This section indicates the required/recommended operating      */
  932. /*  system, and operates similarly to the CPU section described    */
  933. /*  above.                                                         */
  934. /*-----------------------------------------------------------------*/
  935. #define  vivPlatOsIntelMsdos              0
  936. #define  vivPlatOsIntelWindows            1
  937. #define  vivPlatOsIntelOs2                2
  938. #define  vivPlatOsMacSys                  3
  939. #define  vivPlatOsMacAux                  4
  940. #define  vivPlatOsApple2                  5
  941. #define  vivPlatOsUnalloc6                6
  942. #define  vivPlatOsUnalloc7                7
  943. #define  vivPlatOsUnalloc8                8
  944. #define  vivPlatOsUnalloc9                9
  945.  
  946. /*--------------------------- Intel MS-DOS ----*/
  947. #define  vibPlatOsDos10                   0x0001
  948. #define  vibPlatOsDos20                   0x0002
  949. #define  vibPlatOsDos21                   0x0004
  950. #define  vibPlatOsDos211                  0x0008
  951. #define  vibPlatOsDos30                   0x0010
  952. #define  vibPlatOsDos31                   0x0020
  953. #define  vibPlatOsDos32                   0x0040
  954. #define  vibPlatOsDos33                   0x0080 
  955. #define  vibPlatOsDos40                   0x0100
  956. #define  vibPlatOsDos50                   0x0200
  957. #define  vibPlatOsDos60                   0x0400
  958.  
  959.          /*  Data Types and Structures (Platforms, cont.)   */
  960.  
  961. /*--------------------------- Intel Windows ---*/
  962. #define  vibPlatOsWin10                   0x0001
  963. #define  vibPlatOsWin20                   0x0002
  964. #define  vibPlatOsWin30                   0x0004
  965. #define  vibPlatOsWin31                   0x0008       /* >= 286 */
  966. #define  vibPlatOsWinNT                   0x0100
  967. #define  vibPlatOsWinFW                   0x0800
  968. #define  vibPlatOsWinPen                  0x4000
  969.  
  970. /*--------------------------- Intel OS/2 ------*/
  971. #define  vibPlatOsOS2_10                  0x0001
  972. #define  vibPlatOsOS2_11                  0x0002
  973. #define  vibPlatOsOS2_12                  0x0004
  974. #define  vibPlatOsOS2_13                  0x0008
  975. #define  vibPlatOsOS2_20                  0x0010       /* >= 386 */
  976. #define  vibPlatOsOS2_21                  0x0020
  977.  
  978. /*--------------------------- Mac Sys ---------*/
  979. #define  vibPlatOsMacSys6_0_5             0x0001
  980. #define  vibPlatOsMacSys6_0_7             0x0002
  981. #define  vibPlatOsMacSys6_0_8             0x0004
  982. #define  vibPlatOsMacSys7_0               0x0008
  983. #define  vibPlatOsMacSys7_0_1             0x0010
  984. #define  vibPlatOsMacSys7_1               0x0020
  985.  
  986. /*--------------------------- Mac A/UX --------*/
  987. #define  vibPlatOsMacAux2_0_1             0x0001
  988. #define  vibPlatOsMacAux3_0               0x0002
  989.  
  990. /*--------------------------- AppleII ---------*/
  991. #define  vibPlatOsAp2Dos33                0x0001
  992. #define  vibPlatOsAp2Prodos81x            0x0002
  993. #define  vibPlatOsAp2Prodos82x            0x0004
  994. #define  vibPlatOsAp2Gsos4x               0x0100
  995. #define  vibPlatOsAp2Gsos5x               0x0200
  996. #define  vibPlatOsAp2Gsos60               0x0400
  997. #define  vibPlatOsAp2Gsos601              0x0800
  998.  
  999. /*--------------------------- Unix ------------*/
  1000.  
  1001.          /*  Data Types and Structures (Platforms, cont.)   */
  1002.  
  1003. /*---------------------------------------- typedef viPlatFeat -----*/
  1004. /*  The VENDINFO record also contains ONE list of platform         */
  1005. /*  features which may be associated with the product.  Each of    */
  1006. /*  these is represented by one byte in the vidPlatFeatures array. */
  1007. /*  Each such byte can have one of the following four values.      */
  1008. /*  These values are defined this way:                             */
  1009. /*       Irrelevant  -- Presence or absence of this feature will   */
  1010. /*                      have no effect on whether or not this      */
  1011. /*                      product works.                             */
  1012. /*       Supported   -- This particular feature is specifically    */
  1013. /*                      supported by the product.                  */
  1014. /*       Recommended -- It is recommended that this feature be     */
  1015. /*                      present if the product is used.            */
  1016. /*       Required    -- This feature must be present, or the       */
  1017. /*                      product won't work.                        */
  1018. /*       WontWork    -- If this feature is present, the product    */
  1019. /*                      won't work.                                */
  1020. /*       Unknown     -- Self-explanatory.                          */
  1021. /*-----------------------------------------------------------------*/
  1022. #define  vivPlatFeatCount              55
  1023. typedef struct {
  1024.    byte         vidPlatFeatures [ vivPlatFeatCount + 10 ];/* pf?   */
  1025.                                              /* see vidPlatFeat... */
  1026. } viPlatFeat;      /* 55 fields, 65 bytes */
  1027.  
  1028. /*--------------------------- field values ----*/
  1029. #define  vibPlatFeatIrrelevant            0x0
  1030. #define  vibPlatFeatSupported             0x1
  1031. #define  vibPlatFeatRecommended           0x2
  1032. #define  vibPlatFeatRequired              0x3
  1033. #define  vibPlatFeatWontWork              0x4
  1034. #define  vibPlatFeatUnknown               0x5
  1035.  
  1036. /*--------------------------- configuration ---*/
  1037. #define  vivPlatFeatConfFpu               0             /* pfcf n */
  1038. #define  vivPlatFeatConfLaptop            1             /* pfcl n */
  1039. #define  vivPlatFeatConfMca               2             /* pfcm n */
  1040.  
  1041. /*--------------------------- RAM -------------*/
  1042. #define  vivPlatFeatRamExpandOrExtend     3             /* pfro n */
  1043. #define  vivPlatFeatRamEms                4             /* pfrm n */
  1044. #define  vivPlatFeatRamExtended           5             /* pfre n */
  1045. #define  vivPlatFeatRamXms                6             /* pfrx n */
  1046. #define  vivPlatFeatRamHimem              7             /* pfrh n */
  1047.  
  1048. /*--------------------------- disk drives------*/
  1049. #define  vivPlatFeatDiskHard              8             /* pfdh n */
  1050. #define  vivPlatFeatDiskFloppyOnly        9             /* pfdf n */
  1051. #define  vivPlatFeatDiskCdrom             10            /* pfdc n */
  1052.  
  1053. /*--------------------------- ports -----------*/
  1054. #define  vivPlatFeatPortPar               11            /* pfop n */
  1055. #define  vivPlatFeatPortSer               12            /* pfos n */
  1056. #define  vivPlatFeatPortPcmcia            13            /* pfoc n */
  1057. #define  vivPlatFeatPortGame              14            /* pfog n */
  1058.  
  1059.  
  1060.          /*  Data Types and Structures (Platforms, cont.)   */
  1061.  
  1062. /*--------------------------- video -----------*/
  1063. #define  vivPlatFeatVidMonoText           15            /* pfvm n */
  1064. #define  vivPlatFeatVidHerc               16            /* pfvh n */
  1065. #define  vivPlatFeatVidTandy              17            /* pfvt n */
  1066. #define  vivPlatFeatVidCga                18            /* pfvc n */
  1067. #define  vivPlatFeatVidEga                19            /* pfve n */
  1068. #define  vivPlatFeatVidMcga               20            /* pfvn n */
  1069. #define  vivPlatFeatVidMcga256            21            /* pfvo n */
  1070. #define  vivPlatFeatVidVga                22            /* pfvv n */
  1071. #define  vivPlatFeatVidSvgaVesa           23            /* pfvw n */
  1072. #define  vivPlatFeatVidSvgaOther          24            /* pfvs n */
  1073. #define  vivPlatFeatVid8514               25            /* pfv8 n */
  1074. #define  vivPlatFeatVidXga                26            /* pfvx n */
  1075. #define  vivPlatFeatVidMonoMonitor        27            /* pfva n */
  1076. #define  vivPlatFeatVidColorMonitor       28            /* pfvb n */
  1077.  
  1078. /*--------------------------- input -----------*/
  1079. #define  vivPlatFeatInpKeyboard           29            /* pfik n */
  1080. #define  vivPlatFeatInpMouse              30            /* pfim n */
  1081. #define  vivPlatFeatInpDigitizer          31            /* pfid n */
  1082. #define  vivPlatFeatInpJoystick           32            /* pfij n */
  1083.  
  1084. /*--------------------------- scanner ---------*/
  1085. #define  vivPlatFeatScanHandLogitech      33            /* pfal n */
  1086. #define  vivPlatFeatScanHandGenius        34            /* pfag n */
  1087. #define  vivPlatFeatScanFlatbedHP         35            /* pfaf n */
  1088.  
  1089. /*--------------------------- printer ---------*/
  1090. #define  vivPlatFeatPrinterYes            36            /* pfpy n */
  1091. #define  vivPlatFeatPrintText             37            /* pfpt n */
  1092. #define  vivPlatFeatPrintGraphIbm         38            /* pfpi n */
  1093. #define  vivPlatFeatPrintGraphEpson9      39            /* pfpe n */
  1094. #define  vivPlatFeatPrintGraphEpson24     40            /* pfpf n */
  1095. #define  vivPlatFeatPrintHpDeskjet        41            /* pfpd n */
  1096. #define  vivPlatFeatPrintHpPaintjet       42            /* pfpp n */
  1097. #define  vivPlatFeatPrintHpLaserjet       43            /* pfpl n */
  1098. #define  vivPlatFeatPrintPostscript       44            /* pfps n */
  1099. #define  vivPlatFeatPrintPlotter          45            /* pfpo n */
  1100.  
  1101. /*--------------------------- modem -----------*/
  1102. #define  vivPlatFeatModemAnySerial        46            /* pfma n */
  1103. #define  vivPlatFeatModemHayesCompat      47            /* pfmh n */
  1104. #define  vivPlatFeatModemFax              48            /* pfmf n */
  1105.  
  1106. /*--------------------------- sound card ------*/
  1107. #define  vivPlatFeatSoundCardYes          49            /* pfsy n */
  1108. #define  vivPlatFeatSoundAdlib            50            /* pfsa n */
  1109. #define  vivPlatFeatSoundCovox            51            /* pfsc n */
  1110. #define  vivPlatFeatSoundBlast            52            /* pfsb n */
  1111. #define  vivPlatFeatSoundMidi             53            /* pfsm n */
  1112.  
  1113. /*--------------------------- network ---------*/
  1114. #define  vivPlatFeatNetwork               54            /* pfne n */
  1115.  
  1116.               /*  Data Types and Structures (cont.)   */
  1117.  
  1118. /*--------------------------------------- typedef viElectAddr -----*/
  1119. /*          Electronic Addresses for Author/Support/Ordering       */
  1120. /*-----------------------------------------------------------------*/
  1121. typedef struct {
  1122.    char         vidBbsName       [ vivLenBbsName ];    /* ?en s */
  1123.    char         vidBbsPhone      [ vivLenPhone ];      /* ?eb s */
  1124.    char         vidBbsUserName   [ vivLenBbsUserName]; /* ?eu s */
  1125.    char         vidAmericaOnLine [vivLenAmericaOnLine];/* ?ea s */
  1126.    char         vidCompuserve    [ vivLenCompuserve ]; /* ?ec s */
  1127.    char         vidDelphi        [ vivLenDelphi ];     /* ?ed s */
  1128.    char         vidGenie         [ vivLenGenie ];      /* ?eg s */
  1129.    char         vidProdigy       [ vivLenProdigy ];    /* ?ep s */
  1130.    char         vidFidonet       [ vivLenFidonet ];    /* ?ef s */
  1131.    char         vidInternet      [ vivLenInternet ];   /* ?ei s */
  1132.    char         vidRime          [ vivLenRime ];       /* ?er s */
  1133.    TextBlock    vidOtherElect    [ vivLenMisc2 ];      /* ?eo s */
  1134. } viElectAddr;     /* 12 fields, 417 bytes */
  1135.  
  1136.               /*  Data Types and Structures (cont.)   */
  1137.  
  1138. /*------------------------------------------ typedef viRegPkg -----*/
  1139. /*  This structure contains information about the price and        */
  1140. /*  registration benefits associated with a shareware product.     */
  1141. /*  Two of these structures are in the VENDINFO record: one        */
  1142. /*  represents the minimum registration package, and one the       */
  1143. /*  maximum.  If there is only one registration price for a        */
  1144. /*  shareware product, the two structurea should be identical.     */
  1145. /*  If there's any price or benefits information not covered by    */
  1146. /*  the available fields, the "catch-all" vidRegPriceBenefitsOther */
  1147. /*  field can be used.                                             */
  1148. /*-----------------------------------------------------------------*/
  1149. typedef struct {
  1150.    Price        vidRegPrice;                             /* i?p  p */
  1151.    long         vidRegBenefits[2]; /* see vibBene... */  /* i?b?   */
  1152.    char         vidRegPriceBenefitsOther [ vivLenMisc1 ];/* i?v  s */
  1153. } viRegPkg;        /* 37 fields, 93 bytes */
  1154.  
  1155. /*------------------------------------- registration benefits -----*/
  1156. /*  These boolean fields contain a list of possible registration   */
  1157. /*  benefits.                                                      */
  1158. /*-----------------------------------------------------------------*/
  1159. #define  vibBeneAddlData                  0x00000001L   /* i?bad b */
  1160. #define  vibBeneAddlProg                  0x00000002L   /* i?bap b */
  1161. #define  vibBeneBbsSupp                   0x00000004L   /* i?bbs b */
  1162. #define  vibBeneBranding                  0x00000008L   /* i?bbr b */
  1163. #define  vibBeneBugNotice                 0x00000010L   /* i?bbu b */
  1164. #define  vibBeneCheatCode                 0x00000020L   /* i?bcc b */
  1165. #define  vibBeneCommission                0x00000040L   /* i?bcm b */
  1166. #define  vibBeneContest                   0x00000080L   /* i?bcn b */
  1167. #define  vibBeneCustom                    0x00000100L   /* i?bcu b */
  1168. #define  vibBeneConvertOther              0x00000200L   /* i?bcr b */
  1169. #define  vibBeneConvertOld                0x00000400L   /* i?bcx b */
  1170. #define  vibBeneDiscount                  0x00000800L   /* i?bdi b */
  1171. #define  vibBeneEnhanced                  0x00001000L   /* i?ben b */
  1172. #define  vibBeneFreeGoodies               0x00002000L   /* i?bfg b */
  1173. #define  vibBeneFuture                    0x00004000L   /* i?bfu b */
  1174. #define  vibBeneGuarantee                 0x00008000L   /* i?bgu b */
  1175. #define  vibBeneHints                     0x00010000L   /* i?bhi b */
  1176. #define  vibBeneLatest                    0x00020000L   /* i?bla b */
  1177. #define  vibBeneLifetimeSupp              0x00040000L   /* i?bls b */
  1178. #define  vibBeneNewsletter                0x00080000L   /* i?bne b */
  1179. #define  vibBenePreprint                  0x00100000L   /* i?bpp b */
  1180. #define  vibBenePrintedManual             0x00200000L   /* i?bpm b */
  1181. #define  vibBeneQuickRef                  0x00400000L   /* i?bqr b */
  1182. #define  vibBeneRecordLimit               0x00800000L   /* i?brl b */
  1183. #define  vibBeneRrsElim                   0x01000000L   /* i?bre b */
  1184. #define  vibBeneRepeatDelay               0x02000000L   /* i?brd b */
  1185. #define  vibBeneSampleData                0x04000000L   /* i?bsd b */
  1186. #define  vibBeneSource                    0x08000000L   /* i?bso b */
  1187. #define  vibBeneSubscription              0x10000000L   /* i?bsu b */
  1188. #define  vibBeneTimeLimit                 0x20000000L   /* i?btl b */
  1189. #define  vibBeneTutorial                  0x40000000L   /* i?btu b */
  1190. #define  vibBeneUpdateNotice              0x80000000L   /* i?bun b */
  1191. #define  vibBeneUpdateFree                0x00000001L   /* i?buf b */
  1192. #define  vibBeneVoiceSupp                 0x00000002L   /* i?bvs b */
  1193. #define  vibBeneWatermark                 0x00000004L   /* i?bwa b */
  1194. #define  vivBeneCount                35
  1195.  
  1196.                      /*****************************/
  1197.                      /*  VENDINFO Header Section  */
  1198.                      /*****************************/
  1199.  
  1200. /*--------------------------------------------------- comment -----*/
  1201. /*  Because some C compilers can't handle forward references, it   */
  1202. /*  is necessary to define the individual sections of the fixed-   */
  1203. /*  length VENDINFO record before defining the record itself.  The */
  1204. /*  sections are:                                                  */
  1205. /*       header                                                    */
  1206. /*       product information                                       */
  1207. /*       author information                                        */
  1208. /*       ordering information                                      */
  1209. /*       prices and benefits information                           */
  1210. /*       support information                                       */
  1211. /*       general (channel-independent) distribution policy         */
  1212. /*       channel-specific distribution policy                      */
  1213. /*-----------------------------------------------------------------*/
  1214.  
  1215. /*=================================================================*/
  1216. /*          Header Section structure definition                    */
  1217. /*=================================================================*/
  1218.  
  1219. /*-------------------------------------- typedef viSectHeader -----*/
  1220. /*  This section of the record is used for identification and      */
  1221. /*  security, and contains information about the overall record,   */
  1222. /*  such as the date/time of its creation.                         */
  1223. /*-----------------------------------------------------------------*/
  1224. typedef struct {
  1225.    char         vidHeadString[12];      /* "VENDINFO" + 0x05040306 */
  1226.    word         vidHeadVersion;                                      /* hv n */
  1227.    byte         vidHeadViType; /* see vivRecType... */     /* ht n */
  1228.    Date         vidHeadPrepDate;                           /* hd d */
  1229.    long         vidHeadTextRecordSize;
  1230.    long         vidHeadTextRecordCRC;
  1231.    long         vidHeadDataRecordSize;             /* uncompressed */
  1232.    long         vidHeadDataRecordCRC;              /* uncompressed */
  1233.    long         vidHeadUserId;
  1234.    long         vidHeadAuthenticityKey1;
  1235.    long         vidHeadAuthenticityKey2;
  1236. } viSectHeader;    /* 11 fields, 45 bytes */
  1237.  
  1238. /*=================================================================*/
  1239. /*          Constants used in VENDINFO Header Section              */
  1240. /*=================================================================*/
  1241.  
  1242. /*----------------- VENDINFO record types (see vidHeadViType) -----*/
  1243. /*  There are several entirely different types of VENDINFO record, */
  1244. /*  with different structures.  The record-type field allows them  */
  1245. /*  to be differentiated.  These are the possible values.          */
  1246. /*-----------------------------------------------------------------*/
  1247. #define  vivRecTypePackageMain            1
  1248. #define  vivRecTypePackageSecondary       2
  1249. #define  vivRecTypeIntermed               99
  1250.  
  1251.                      /*****************************/
  1252.                      /*      Product Section      */
  1253.                      /*****************************/
  1254.  
  1255. /*=================================================================*/
  1256. /*          Product Section structure definition                   */
  1257. /*=================================================================*/
  1258.  
  1259. /*------------------------------------- typedef viSectProduct -----*/
  1260. /*  The Product Section describes the product and version,         */
  1261. /*  including names, descriptions, categories, keywords, and       */
  1262. /*  minimal and recommended platforms.                             */
  1263. /*-----------------------------------------------------------------*/
  1264. typedef struct {
  1265.    byte         vidProdType;    /* see vivProdType...*/   /* py  n */
  1266.    char         vidProdName [ vivLenName ];               /* pp  s */
  1267.    char         vidProdNameExtension [ vivLenName ];      /* pe  s */
  1268.    char         vidProdVersion [ vivLenProdVers ];        /* pv  s */
  1269.    Date         vidProdVersionDate;                       /* pt  d */
  1270.    char         vidProdVersionReason [ vivLenMisc2 ];     /* pr  t */
  1271.    char         vidProdFileNamePrefix [ vivLenPrefix ];   /* pn  s */
  1272.    byte         vidProdNumberOfParts;                     /* ppn n */
  1273.    char         vidProdThisPart [ vivLenPrefix ];         /* ppt s */
  1274.    char         vidProdListOfParts [ vivLenMisc1 ];       /* ppl s */
  1275.    char         vidProdListOfCisParts [ vivLenCisList ];  /* ppc s */
  1276.    char         vidProdScreenshotTypes [vivLenShotTypes]; /* ph  s */
  1277.    char         vidProdOldPkgsReplaced [ vivLenMisc1 ];   /* px  s */
  1278.    TextBlock    vidProdDescription1 [ vivLenDesc1 ];      /* pd1 t */
  1279.    TextBlock    vidProdDescription2 [ vivLenDesc2 ];      /* pd2 t */
  1280.    TextBlock    vidProdDescription3 [ vivLenDesc3 ];      /* pd3 t */
  1281.    TextBlock    vidProdDescription4 [ vivLenDesc4 ];      /* pd4 t */
  1282.    TextBlock    vidProdDescription5 [ vivLenDesc5 ];      /* pd5 t */
  1283.    TextBlock    vidProdDescription6 [ vivLenDesc6 ];      /* pd6 t */
  1284.    viPlatform   platMin;                                  /* p1?   */
  1285.    viPlatform   platRec;                                  /* p2?   */
  1286.    viPlatFeat   platFeat;                                 /* pf?   */
  1287.    char         vidProdOtherRequiredSw [ vivLenMisc1 ];   /* ps  s */
  1288.    TextBlock    vidProdOtherRequirements [ vivLenMisc3 ]; /* po  t */
  1289.    long         vidProdCategories[5];                     /* pc? ? */
  1290.    char         vidProdKeywords [ vivLenMisc1 ];          /* pk  s */
  1291. } viSectProduct;   /* 100 fields, 4315 bytes */
  1292.  
  1293.  
  1294. /*=================================================================*/
  1295. /*          Constants used in Product Section                      */
  1296. /*=================================================================*/
  1297.  
  1298. /*---------------------------- product type (see vidProdType) -----*/
  1299. /*  While VENDINFO is primarily intended to describe software      */
  1300. /*  products, it can be used to describe various other types of    */
  1301. /*  computer-related products, especially those that can actually  */
  1302. /*  be distributed electronically.  Here are possible values of    */
  1303. /*  the product-type field.                                        */
  1304. /*-----------------------------------------------------------------*/
  1305. #define  vivProdTypeSoftware              0
  1306. #define  vivProdTypeHardware              1
  1307. #define  vivProdTypeDataFile              2
  1308. #define  vivProdTypeTextFile              3
  1309. #define  vivProdTypeBook                  4
  1310. #define  vivProdTypeMagazine              5
  1311. #define  vivProdTypeCatalog               6
  1312. #define  vivProdTypeVideo                 7
  1313.  
  1314.                  /*      Product Section (cont.)      */
  1315.  
  1316. /*=================================================================*/
  1317. /*          Notes on Product Section                               */
  1318. /*=================================================================*/
  1319.  
  1320. /*-------------------------- product name, extension, version -----*/
  1321. /*  In order to allow use of the information by automated tools,   */
  1322. /*  the product name and version are broken into components.  For  */
  1323. /*  example, the phrase "Lotus 1-2-3 Spreadsheet Processor, V2.20" */
  1324. /*  would be broken down as follows:                               */
  1325. /*    vidProdName          -- "Lotus 1-2-3"                        */
  1326. /*    vidProdNameExtension -- "Spreadsheet Processor"              */
  1327. /*    vidProdVersion       -- "2.20"                               */
  1328. /*-----------------------------------------------------------------*/
  1329.  
  1330. /*--------------------------- product package filenames, etc. -----*/
  1331. /*  Distribution packages are typically compressed files with the  */
  1332. /*  filename prefix indicating the specific product package, and   */
  1333. /*  the filename extension indicating the compression program used */
  1334. /*  to produce the package.  Except where shorter names are        */
  1335. /*  required (e.g., on CompuServe), the filename prefix should     */
  1336. /*  take one of the following forms:                               */
  1337. /*    AAAAA99P -- For multipart packages, the first five           */
  1338. /*                characters are alphabetic, and represent the     */
  1339. /*                product.  The next two are numeric, and          */
  1340. /*                represent the version.  The last is alphabetic,  */
  1341. /*                using the sequence { A, B, C, ... }, and         */
  1342. /*                indicates which part of the total product this   */
  1343. /*                particular package is.                           */
  1344. /*    AAAAA99  -- For single-part packages, any of the remaining   */
  1345. /*    AAAAA999    three forms is allowed, where the product name   */
  1346. /*    AAAAAA99    portion is strictly alphabetic, and the version  */
  1347. /*                portion is strictly numeric.                     */
  1348. /*                                                                 */
  1349. /*  vidProdNumberOfParts contains the number of packages making up */
  1350. /*  the product.                                                   */
  1351. /*                                                                 */
  1352. /*  vidProdListOfParts contains a blank-separated list of the      */
  1353. /*  filename prefixes of the packages making up the product.       */
  1354. /*  Similarly, vidProdListOfCisParts contains a list of the        */
  1355. /*  filename prefixes to be used on a system on which filename     */
  1356. /*  prefixes are restricted to six characters.  In each case, the  */
  1357. /*  first part listed will contain the main VENDINFO.DIZ files,    */
  1358. /*  while the others, if any, will contain secondary VENDINFO.DIZ  */
  1359. /*  files.  Finally,  vidProdOldPkgsReplaced contains a list of    */
  1360. /*  filename prefixes of previous versions packages replaced by    */
  1361. /*  this version.                                                  */
  1362. /*-----------------------------------------------------------------*/
  1363.  
  1364. /*-------------------------------------- product screen shots -----*/
  1365. /*  If the author/publisher makes available a set of screen shots  */
  1366. /*  of the product, on request and/or via the VENDINFO Product     */
  1367. /*  Registry, the filename extensions (e.g., graphical formats) of */
  1368. /*  the available screen shots should be listed in                 */
  1369. /*  vidProdScreenshotTypes.  Use the artificial filename           */
  1370. /*  extension "FLM" to indicate hardcopy photos available only     */
  1371. /*  from the author.  A sample value for this string is            */
  1372. /*  "PCX CGM FLM".                                                 */
  1373. /*-----------------------------------------------------------------*/
  1374.  
  1375.                  /*      Product Section (cont.)      */
  1376.  
  1377. /*---------------------------------------- other requirements -----*/
  1378. /*  Two "catch-all" variables are provided for recording platform  */
  1379. /*  requirements or recommendations that aren't covered in the     */
  1380. /*  viPlatform structure.  Wherever possible, requirements should  */
  1381. /*  be defined in the viPlatform structures, since that allows     */
  1382. /*  complete processing by automated tools.  These "catch-alls"    */
  1383. /*  are only for cases not covered.                                */
  1384. /*                                                                 */
  1385. /*  vidProdOtherRequiredSw is a simple string which might    */
  1386. /*  contain one or more (blank-separated) names of other software  */
  1387. /*  necessary to use the product.  Likely examples are run-time    */
  1388. /*  packages, such as VBRUN200.DLL, or main applications if the    */
  1389. /*  product is an add-on (e.g., "Lotus 1-2-3" for a spreadsheet    */
  1390. /*  macro package).                                                */
  1391. /*                                                                 */
  1392. /*  vidProdOtherRequirements is a TextBlock (defined earlier)      */
  1393. /*  in which to list hardware, operating systems, peripherals,     */
  1394. /*  etc., that are not covered in viPlatform, and in which to list */
  1395. /*  version numbers and other details of the requirements in       */
  1396. /*  viPlatform WHEN NECESSARY.  For example, a laser-printer       */
  1397. /*  product that works on HP LaserJets, but only starting with the */
  1398. /*  LaserJet II, should so indicate here (e.g., "LaserJet II and   */
  1399. /*  later"), but if it works with all LaserJets, no specification  */
  1400. /*  is necessary in this TextBlock.                                */
  1401. /*-----------------------------------------------------------------*/
  1402.  
  1403. /*--------------------------- product categories and keywords -----*/
  1404. /*  vidProdCategories is an array containing one primary and four  */
  1405. /*  secondary category codes, using the numbering scheme developed */
  1406. /*  by Rob Rosenberger for his ASP Catalog Entry Editor or a       */
  1407. /*  similar scheme.  VENDINFO editor and processor tools will      */
  1408. /*  probably use an external file to map categories into category  */
  1409. /*  codes, and vice versa.  A small example portion of such a file */
  1410. /*  is:                                                            */
  1411. /*     01000000 Utilities                                          */
  1412. /*        01010000 Disk utilities                                  */
  1413. /*           01010100 Disk cataloging                              */
  1414. /*           01010200 Hard disk utilities                          */
  1415. /*           01010300 Floppy disk utilities                        */
  1416. /*        01020000 File utilities                                  */
  1417. /*           01020100 Backup/restore                               */
  1418. /*           01020200 Encryption & security                        */
  1419. /*  Shorthand codes for product categories are "pc1", "pc2", etc.  */
  1420. /*                                                                 */
  1421. /*  vidProdKeywords is a blank-separated list of keywords          */
  1422. /*  describing the product.  In general, keywords should be listed */
  1423. /*  in order of importance, since it is possible that only a       */
  1424. /*  portion of the list will be used.  At present, no standardized */
  1425. /*  list of keywords is planned (i.e., the list is "free-form").   */
  1426. /*-----------------------------------------------------------------*/
  1427.  
  1428.                      /*****************************/
  1429.                      /*      Author Section       */
  1430.                      /*****************************/
  1431.  
  1432. /*=================================================================*/
  1433. /*          Author Section structure definition                    */
  1434. /*=================================================================*/
  1435.  
  1436. /*-------------------------------------- typedef viSectAuthor -----*/
  1437. /*  The Author section contains information about the product's    */
  1438. /*  author or publisher.  This is distinct from information about  */
  1439. /*  how to order, or how to obtain technical support.              */
  1440. /*-----------------------------------------------------------------*/
  1441. typedef struct {
  1442.    char         vidAuthorName [ vivLenName ];             /* an  s */
  1443.    char         vidAuthorCompanyName [ vivLenName ];      /* ac  s */
  1444.    char         vidAuthorCompanyAddress[5][vivLenAddress];/* aa  t */
  1445.    char         vidAuthorPhone [ vivLenPhone ];           /* ap  s */
  1446.    char         vidAuthorFax [ vivLenPhone ];             /* af  s */
  1447.    char         vidAuthorQueriesPhone [ vivLenPhone ];    /* aq  s */
  1448.    viElectAddr  elec;                                     /* ae?   */
  1449.    word         vidAuthorMembership; /* vibMember... */   /* am? b */
  1450.    char         vidAuthorMembershipOther [ vivLenMisc1 ]; /* amx s */
  1451. } viSectAuthor;    /* 25 fields, 797 bytes */
  1452.  
  1453. /*----------------------------------------------- memberships -----*/
  1454. /*  Author membership in trade associations may be relevant to     */
  1455. /*  users and distributors.  For example, ASP distributor members  */
  1456. /*  are required to mark products by ASP author/publisher members  */
  1457. /*  in their catalogs and files lists.  Trade associations not     */
  1458. /*  recognized in the current version of the standard can be       */
  1459. /*  handled via the vidAuthorMembershipOther string.  Known        */
  1460. /*  trade associations are:                                        */
  1461. /*       ASAD -- Association of Shareware Authors and              */
  1462. /*               Distributors                                      */
  1463. /*       ASP  -- Association of Shareware Professionals            */
  1464. /*       DSAH -- Deutschsprachige Shareware Authoren und           */
  1465. /*               Haendlervereinigung                               */
  1466. /*       ESC  -- Educational Software CoOperative                  */
  1467. /*       SPA  -- Software Publisher's Association                  */
  1468. /*       STAR -- Shareware Trade Association and Resources         */
  1469. /*-----------------------------------------------------------------*/
  1470. #define  vibMemberAsad                    0x00000001    /* amb b */
  1471. #define  vibMemberAsp                     0x00000002    /* ama b */
  1472. #define  vibMemberDsah                    0x00000004    /* amd b */
  1473. #define  vibMemberEsc                     0x00000008    /* ame b */
  1474. #define  vibMemberSpa                     0x00000010    /* amp b */
  1475. #define  vibMemberStar                    0x00000020    /* ams b */
  1476.  
  1477.  
  1478. /*=================================================================*/
  1479. /*          Notes on Author Section                                */
  1480. /*=================================================================*/
  1481.  
  1482. /*-------------------------------------- author, company name -----*/
  1483. /*  The vidAuthorName field is intended for the author's personal  */
  1484. /*  name, if that is to be included in the record.  The            */
  1485. /*  vidCompanyName field must not be omitted.  If no separate      */
  1486. /*  company name is used, the author's personal name will appear   */
  1487. /*  here.  This field is used as one of the keys in the VENDINFO   */
  1488. /*  security arrangements.  Changing it will invalidate any        */
  1489. /*  security and user-registration keys based on it.               */
  1490. /*-----------------------------------------------------------------*/
  1491.  
  1492.                      /*****************************/
  1493.                      /*      Order Section        */
  1494.                      /*****************************/
  1495.  
  1496. /*=================================================================*/
  1497. /*          Order Section structure definition                     */
  1498. /*=================================================================*/
  1499.  
  1500. /*--------------------------------------- typedef viSectOrder -----*/
  1501. /*  The Order section provides contact information for ordering    */
  1502. /*  the product or related products, as distinct from contact      */
  1503. /*  information about the author or technical support.             */
  1504. /*-----------------------------------------------------------------*/
  1505. typedef struct {
  1506.    char         vidOrderAddress [ 6 ] [ vivLenAddress ];  /* oa  t */
  1507.    char         vidOrderPhoneTollFree [ vivLenPhone ];    /* ot  s */
  1508.    char         vidOrderPhone [ vivLenPhone ];            /* op  s */
  1509.    char         vidOrderFax [ vivLenPhone ];              /* of  s */
  1510.    viElectAddr  elec;                                     /* oe?   */
  1511.    word         vidOrderCredit;  /* see vibCredit... */   /* oc? b */
  1512.    char         vidOrderCreditOther [ vivLenMisc1 ];      /* ocx s */
  1513.    long         vidOrderFunds;      /* see vibPay... */   /* ox? b */
  1514.    char         vidOrderFundsOther [ vivLenMisc1 ];       /* oxx s */
  1515.    char         vidOrderBankAccount [ vivLenMisc1 ];      /* ob  s */
  1516. } viSectOrder;   /* 45 fields, 912 bytes */
  1517.  
  1518. /*---------------------------------------------- credit cards -----*/
  1519. /*  The vidOrderCredit field allows specification of known credit  */
  1520. /*  cards that are acceptable.  Any additional cards and           */
  1521. /*  information about surcharges, etc.,  can be listed in the      */
  1522. /*  vidOrderCreditOther string.                                    */
  1523. /*-----------------------------------------------------------------*/
  1524. #define  vibCreditAccessEurocard          0x0001        /* oce b */
  1525. #define  vibCreditAmexOptima              0x0002        /* oca b */
  1526. #define  vibCreditDinersCard              0x0004        /* occ b */
  1527. #define  vibCreditDiscover                0x0008        /* ocd b */
  1528. #define  vibCreditMastercard              0x0010        /* ocm b */
  1529. #define  vibCreditVisa                    0x0020        /* ocv b */
  1530.  
  1531. /*---------------- acceptable currencies and forms of payment -----*/
  1532. /*  The vidOrderFunds field allows specification of the various    */
  1533. /*  forms of cash, check, and money order payment that may be      */
  1534. /*  used.  International banking practices and exchange rates make */
  1535. /*  this a somewhat complicated area.  Unfortunately, the fields   */
  1536. /*  therefore required detailed definition.                        */
  1537. /*    PmoSameCountry -- postal money order issued in recipient's   */
  1538. /*                      country.                                   */
  1539. /*    PmoInternational -- international postal money order         */
  1540. /*    CheckPersSame -- a personal check written in the currency of */
  1541. /*                     the recipient's country and drawn on a bank */
  1542. /*                     in the recipient's country.                 */
  1543. /*    CheckPersHardSender -- a personal check written in a stable, */
  1544. /*                     convertible, "hard" currency other than     */
  1545. /*                     that used in recipient's country, and drawn */
  1546. /*                     on a bank in the sender's, and not the      */
  1547. /*                     recipient's, country.                       */
  1548. /*    CheckPersHardRecip -- a personal check written in a stable,  */
  1549. /*                     convertible, "hard" currency other than     */
  1550. /*                     that used in recipient's country, and       */
  1551. /*                     drawn on a bank in the recipient's country. */
  1552.  
  1553.                  /*      Order Section (cont.)        */
  1554.  
  1555. /*    CheckPersOther -- a personal check other than those          */
  1556. /*                     described above, typically in a "soft"      */
  1557. /*                     currency.                                   */
  1558. /*    CheckBank... -- same as the four categories just listed,     */
  1559. /*                     but the check is a bank draft or cashier's  */
  1560. /*                     check.                                      */
  1561. /*    Cash... -- similar to check categories above, but involving  */
  1562. /*                     actual currency sent through the mail       */
  1563. /*    TravCheck... -- similar to categories above, but involving   */
  1564. /*                     traveller's checks.                         */
  1565. /*    AmexMoneyOrder -- American Express Money Order               */
  1566. /*    EuroChequeSenderGuar -- EuroCheque written in the currency   */
  1567. /*                     of the sender, with a valid cheque          */
  1568. /*                     guarantee card number written on the back.  */
  1569. /*    DirectBank -- Direct bank-to-bank electronic funds transfer, */
  1570. /*                     paid to the bank and account number         */
  1571. /*                     indicated in vidOrderBankAccount.           */
  1572. /*    PurchOrderNbrMost -- Purchase order numbers accepted in most */
  1573. /*                     cases from major firms.                     */
  1574. /*    PurchOrderHardcopyMost -- Purchase orders accepted in        */
  1575. /*                     hardcopy from most major firms.             */
  1576. /*-----------------------------------------------------------------*/
  1577. #define  vibPayPmoSameCountry             0x00000001     /* oxms b */
  1578. #define  vibPayPmoInternational           0x00000002     /* oxmi b */
  1579. #define  vibPayCheckPersSame              0x00000004     /* oxps b */
  1580. #define  vibPayCheckPersHardSender        0x00000008     /* oxph b */
  1581. #define  vibPayCheckPersHardRecip         0x00000010     /* oxpr b */
  1582. #define  vibPayCheckPersOther             0x00000020     /* oxpo b */
  1583. #define  vibPayCheckBankSame              0x00000040     /* oxbs b */
  1584. #define  vibPayCheckBankHardSender        0x00000080     /* oxbh b */
  1585. #define  vibPayCheckBankHardRecip         0x00000100     /* oxbr b */
  1586. #define  vibPayCheckBankOther             0x00000200     /* oxbo b */
  1587. #define  vibPayCashSame                   0x00000400     /* oxcs b */
  1588. #define  vibPayCashHard                   0x00000800     /* oxch b */
  1589. #define  vibPayCashOther                  0x00001000     /* oxco b */
  1590. #define  vibPayTravCheckSame              0x00002000     /* oxts b */
  1591. #define  vibPayTravCheckOther             0x00004000     /* oxto b */
  1592. #define  vibPayAmexMoneyOrder             0x00008000     /* oxa  b */
  1593. #define  vibPayEuroChequeOrigGuar         0x00010000     /* oxe  b */
  1594. #define  vibPayDirectBank                 0x00020000     /* oxd  b */
  1595. #define  vibPayPurchOrderNbrMost          0x00040000     /* oxon b */
  1596. #define  vibPayPurchOrderHardcopyMost     0x00080000     /* oxoh b */
  1597.  
  1598.                      /*****************************/
  1599.                      /*      Prices Section       */
  1600.                      /*****************************/
  1601.  
  1602. /*=================================================================*/
  1603. /*          Prices Section structure definition                    */
  1604. /*=================================================================*/
  1605.  
  1606. /*-------------------------------------- typedef viSectPrices -----*/
  1607. /*  The Prices structure contains information about prices and     */
  1608. /*  registration benefits for the product, including availability  */
  1609. /*  of site licenses and dealer discounts, royalty information,    */
  1610. /*  non-shareware versions, etc.                                   */
  1611. /*-----------------------------------------------------------------*/
  1612. #define  vivPriceShipCount               7
  1613. typedef struct {
  1614.    viRegPkg     mini;                                     /* i1?   */
  1615.    viRegPkg     maxi;                                     /* i2?   */
  1616.    char         vidPriceWhatCurrency [ vivLenCurrency ];  /* ic  s */
  1617.    Price        vidPriceShip [ vivPriceShipCount];        /* is? p */
  1618.                                 /* see vivPriceShip... */
  1619.    word         vidPriceMiscFlags;  /* vibPriceMisc... */ /* im?   */
  1620.    Price        vidPriceRoyaltyMin;                       /* irm p */
  1621.    char         vidPriceRoyaltyMinText [ vivLenMisc1 ];   /* irn s */
  1622.    Price        vidPriceRoyaltyMax;                       /* irx p */
  1623.    char         vidPriceRoyaltyMaxText [ vivLenMisc1 ];   /* iry s */
  1624.    char         vidPriceRoyaltyAgent [ vivLenMisc1 ];     /* ira s */
  1625. } viSectPrices;    /* 96 fields, 488 bytes */
  1626.  
  1627. /*------------------------------------- shipping and handling -----*/
  1628. /*  These fields allow separate shipping and handling charges by   */
  1629. /*  continent, and allow a separate rate for recipients in the     */
  1630. /*  same country as the order address.  These amounts are to be    */
  1631. /*  expressed in the same currency as the registration prices.     */
  1632. /*-----------------------------------------------------------------*/
  1633. #define  vivPriceShipSameCountry          0               /* isc n */
  1634. #define  vivPriceShipNorthAmerica         1               /* isn n */
  1635. #define  vivPriceShipSouthAmerica         2               /* iss n */
  1636. #define  vivPriceShipEurope               3               /* ise n */
  1637. #define  vivPriceShipAsia                 4               /* isa n */
  1638. #define  vivPriceShipAfrica               5               /* isf n */
  1639. #define  vivPriceShipPacificRim           6               /* isp n */
  1640.  
  1641. /*--------------------------------------------- pricing misc. -----*/
  1642. /*  vidPriceMiscFlags contains these binary flags.  The fields are */
  1643. /*  defined as follows:                                            */
  1644. /*      Sitelice -- site licenses are available                    */
  1645. /*      SiteliceSeeText -- actual site license rates are included  */
  1646. /*                     in the human-readable portion of the        */
  1647. /*                     VENDINFO record.                            */
  1648. /*      Discount -- dealer discount prices are available           */
  1649. /*      DiscountSeeText -- actual dealer discount rates are        */
  1650. /*                     included in the human-readable portion of   */
  1651. /*                     the VENDINFO record.                        */
  1652. /*      Royalty -- royalties are required for some forms of        */
  1653. /*                     distribution of this product.  Note that    */
  1654. /*                     royalty rates can be specified here in the  */
  1655. /*                     VENDINFO data record (e.g.,                 */
  1656. /*                     vidPriceRoyaltyMin), in the human-readable  */
  1657. /*                     portion of the record, or neither.          */
  1658. /*      RoyaltyNegot -- royalty rates are always negotiated on a   */
  1659. /*                     case-by-case basis.                         */
  1660.  
  1661.                      /*      Prices Section       */
  1662.  
  1663. /*      RoyaltySeeText -- royalty rates are included in the        */
  1664. /*                     human-readable portion of the VENDINFO      */
  1665. /*                     record.                                     */
  1666. /*      NsvAvailable -- a non-shareware (enhanced) version of this */
  1667. /*                     shareware product is available.             */
  1668. /*      LcrAvailable -- a low-cost retail version of this product  */
  1669. /*                     is available for distribution.              */
  1670. /*-----------------------------------------------------------------*/
  1671. #define  vibPriceMiscSitelice             0x00000001      /* ims b */
  1672. #define  vibPriceMiscSiteliceSeeText      0x00000002      /* imt b */
  1673. #define  vibPriceMiscDiscount             0x00000004      /* imd b */
  1674. #define  vibPriceMiscDiscountSeeText      0x00000008      /* ime b */
  1675. #define  vibPriceMiscRoyalty              0x00000010      /* imr b */
  1676. #define  vibPriceMiscRoyaltyNegot         0x00000020      /* imq b */
  1677. #define  vibPriceMiscRoyaltySeeText       0x00000040      /* imp b */
  1678. #define  vibPriceMiscNsvAvailable         0x00000080      /* imn b */
  1679. #define  vibPriceMiscLcrAvailable         0x00000100      /* iml b */
  1680. #define  vivPriceMiscCount           9
  1681.  
  1682.                      /*****************************/
  1683.                      /*     Support Section       */
  1684.                      /*****************************/
  1685.  
  1686. /*=================================================================*/
  1687. /*          Support Section structure definition                   */
  1688. /*=================================================================*/
  1689.  
  1690. /*------------------------------------- typedef viSectSupport -----*/
  1691. /*  The Support section contains contact information for technical */
  1692. /*  support for the product.                                       */
  1693. /*-----------------------------------------------------------------*/
  1694. typedef struct {
  1695.    char         vidSupportAddress [6] [vivLenAddress];    /* sa  t */
  1696.    char         vidSupportPhone [ vivLenPhone ];          /* sp  s */
  1697.    char         vidSupportFax [ vivLenPhone ];            /* sf  s */
  1698.    viElectAddr  elec;                                     /* se?   */
  1699.    TextBlock    vidSupportForums [ vivLenMisc1 ];         /* ss  t */
  1700. } viSectSupport;   /* 16 fields, 724 bytes */
  1701.  
  1702.                      /*****************************/
  1703.                      /*     General Section       */
  1704.                      /*****************************/
  1705.  
  1706. /*=================================================================*/
  1707. /*        General (channel-independent) Distribution Section       */
  1708. /*=================================================================*/
  1709.  
  1710. /*------------------------------------- typedef viSectGeneral -----*/
  1711. /*  The General section specifies information about the product's  */
  1712. /*  packaging and distribution that applies across all channels of */
  1713. /*  distribution.  Most of the information is in the form of       */
  1714. /*  binary flags, defined a bit later.  The various Text fields    */
  1715. /*  serve as additional-information "catch-all" fields for various */
  1716. /*  subjects that are discussed in connection with those binary    */
  1717. /*  flags.                                                         */
  1718. /*-----------------------------------------------------------------*/
  1719. typedef struct {
  1720.    word         vidGenlDistType; /* see vivDistType... */ /* gt  n */
  1721.    long         vidGenlMiscFlags;   /* vidGenlMisc... */  /* gm? b */
  1722.    char         vidGenlGeogText [ vivLenMisc1 ];          /* gg  s */
  1723.    char         vidGenlInstallText [ vivLenMisc1 ];       /* gi  s */
  1724.    char         vidGenlCompressText [ vivLenMisc1 ];      /* gc  s */
  1725.    char         vidGenlChangeText [ vivLenMisc1 ];        /* gh  s */
  1726.    char         vidGenlGroupSimText [ vivLenMisc1 ];      /* gs  s */
  1727.    char         vidGenlGroupDisText [ vivLenMisc1 ];      /* gd  s */
  1728.    char         vidGenlVendorUpgradeText [ vivLenMisc1 ]; /* gu  s */
  1729. } viSectGeneral;   /* 25 fields, 573 bytes */
  1730.  
  1731.                  /*     General Section (cont.)       */
  1732.  
  1733. /*-------------------------------- product distribution types -----*/
  1734. /*  The vidGenlDistType field allows the author to specify the     */
  1735. /*  basic distribution category into which the product falls.      */
  1736. /*  Definitions are:                                               */
  1737. /*       Commercial -- "commercial" product, not distributable     */
  1738. /*                     except through written permission/contract. */
  1739. /*       CommercialDist -- "commercial" product specifically       */
  1740. /*                     intended for use in distribution packages.  */
  1741. /*                     This code would probably appear only on an  */
  1742. /*                     executable program, not in a VENDINFO.DIZ.  */
  1743. /*       ShareRegistered -- registered version of shareware        */
  1744. /*                     program, not distributable.  This code      */
  1745. /*                     would probably appear only on an executable */
  1746. /*                     program, not in a VENDINFO.DIZ.             */
  1747. /*       ShareRegDist -- registered version of shareware program   */
  1748. /*                     specifically intended for use in            */
  1749. /*                     distribution packages (e.g., an install     */
  1750. /*                     program).  This code would probably appear  */
  1751. /*                     only on an executable program, not in a     */
  1752. /*                     VENDINFO.DIZ.                               */
  1753. /*       ShareRestricted -- shareware product, with distribution   */
  1754. /*                     restrictions expressed in the Distribution  */
  1755. /*                     section of the record.                      */
  1756. /*       ShareUnlimited -- shareware product, freely distributable */
  1757. /*                     by all channels without further permission. */
  1758. /*       CopyrUnlimFree -- copyrighted program, but freely         */
  1759. /*                     distributable by all channels, and freely   */
  1760. /*                     useable without charge or registration.     */
  1761. /*                     Sometimes called "freeware" or              */
  1762. /*                     "bannerware".                               */
  1763. /*       Demo -- demonstration program, not necessarily fully      */
  1764. /*                     functional, freely distributable by all     */
  1765. /*                     channels.                                   */
  1766. /*       Public -- public-domain product, no copyright retained,   */
  1767. /*                     freely distributable, useable, modifiable.  */
  1768. /*       Retired -- used in a VENDINFO-only distribution package,  */
  1769. /*                     to request removal of previous version(s).  */
  1770. /*       TestVersion -- Test version of product, further           */
  1771. /*                     distribution not allowed.                   */
  1772. /*-----------------------------------------------------------------*/
  1773. #define  vivGenlTypeCommercial            0
  1774. #define  vivGenlTypeCommercialDist        1
  1775. #define  vivGenlTypeShareRegistered       2
  1776. #define  vivGenlTypeShareRegDist          3
  1777. #define  vivGenlTypeShareRestricted       4
  1778. #define  vivGenlTypeShareUnlimited        5
  1779. #define  vivGenlTypeCopyrUnlimFree        6
  1780. #define  vivGenlTypeDemo                  7
  1781. #define  vivGenlTypePublic                8
  1782. #define  vivGenlTypeRetired               9
  1783. #define  vivGenlTypeTestVersion           10
  1784. #define  vivGenlTypeCount            11
  1785.  
  1786.                  /*     General Section (cont.)       */
  1787.  
  1788. /*------ channel-independent flags (see genl.viGenlMiscFlags) -----*/
  1789. /*  vidGenlMiscFlags contains various binary flags representing    */
  1790. /*  policies applicable to the product across all distribution     */
  1791. /*  channels.  Definitions are:                                    */
  1792. /*       GeogOnlyUS -- distribution outside the United States is   */
  1793. /*                     illegal because product includes encryption */
  1794. /*                     technology that cannot be exported (any     */
  1795. /*                     other geographical restrictions are placed  */
  1796. /*                     in vidGenlGeogText).                        */
  1797. /*       PkgNoMods -- no modifications whatever are permitted to   */
  1798. /*                     the compressed package as released by the   */
  1799. /*                     author/publisher.                           */
  1800. /*       FilesNoMods -- while addition of files may be allowed, no */
  1801. /*                     modifications or deletions of the original  */
  1802. /*                     files are allowed.                          */
  1803. /*       HelpGoSeparate -- Help files, GO.BAT, etc. may be added.  */
  1804. /*       AdsSeparate -- advertisements may be added, but only as   */
  1805. /*                     separate files.                             */
  1806. /*       AdsAppended -- advertisements may be appended to the      */
  1807. /*                     author's original documentation files, but  */
  1808. /*                     the files must otherwise remain unchanged.  */
  1809. /*       Install -- a different installation program or procedure  */
  1810. /*                     may be substituted or added.                */
  1811. /*       InstallSeeText -- must see human-readable portion of      */
  1812. /*                     VENDINFO record for additional constraints  */
  1813. /*                     on installation changes.                    */
  1814. /*       Compress -- a different compression program can be used   */
  1815. /*                     to repackage the files in this package.     */
  1816. /*       CompressInternal -- internal compressed files may be      */
  1817. /*                     recompressed, as well.                      */
  1818. /*       CompressSeeText -- must see human-readable portion of     */
  1819. /*                     VENDINFO record for additional constraints  */
  1820. /*                     on compression changes.                     */
  1821. /*       GroupSim -- product can be distributed in a single        */
  1822. /*                     package with other similar products, as in  */
  1823. /*                     PsL's megadisks.                            */
  1824. /*       GroupSimPerm -- written permission is required for such   */
  1825. /*                     distribution.                               */
  1826. /*       GroupSimSeeText -- must see human-readable portion of     */
  1827. /*                     VENDINFO record for additional constraints  */
  1828. /*                     on such distribution.                       */
  1829. /*       GroupDis -- product can be distributed in a single        */
  1830. /*                     package with other dis-similar products, as */
  1831. /*                     in a "starter set".                         */
  1832. /*       GroupDisPerm -- written permission is required for such   */
  1833. /*                     distribution.                               */
  1834. /*       GroupDisSeeText -- must see human-readable portion of     */
  1835. /*                     VENDINFO record for additional constraints  */
  1836. /*                     on such distribution.                       */
  1837. /*-----------------------------------------------------------------*/
  1838. #define  vibGenlMiscGeogOnlyUS            0x00000001     /* gmu  b */
  1839. #define  vibGenlMiscPkgNoMods             0x00000002     /* gmp  b */
  1840. #define  vibGenlMiscFilesNoMods           0x00000004     /* gmf  b */
  1841. #define  vibGenlMiscHelpGoSeparate        0x00000008     /* gmhs b */
  1842. #define  vibGenlMiscAdsSeparate           0x00000010     /* gmas b */
  1843. #define  vibGenlMiscAdsAppended           0x00000020     /* gmaa b */
  1844. #define  vibGenlMiscInstall               0x00000040     /* gmi  b */
  1845. #define  vibGenlMiscInstallSeeText        0x00000080     /* gmit b */
  1846. #define  vibGenlMiscCompress              0x00000100     /* gmc  b */
  1847. #define  vibGenlMiscCompressInternal      0x00000200     /* gmci b */
  1848.  
  1849.                  /*     General Section (cont.)       */
  1850.  
  1851. #define  vibGenlMiscCompressSeeText       0x00000400     /* gmct b */
  1852. #define  vibGenlMiscGroupSim              0x00000800     /* gms  b */
  1853. #define  vibGenlMiscGroupSimPerm          0x00001000     /* gmsp b */
  1854. #define  vibGenlMiscGroupSimSeeText       0x00002000     /* gmst b */
  1855. #define  vibGenlMiscGroupDis              0x00004000     /* gmd  b */
  1856. #define  vibGenlMiscGroupDisPerm          0x00008000     /* gmdp b */
  1857. #define  vibGenlMiscGroupDisSeeText       0x00010000     /* gmdt b */
  1858. #define  vivGenlMiscCount        17
  1859.  
  1860.                      /*****************************/
  1861.                      /*   Distribution Section    */
  1862.                      /*****************************/
  1863.  
  1864. /*=================================================================*/
  1865. /*        (channel-specific) Distribution Section                  */
  1866. /*=================================================================*/
  1867.  
  1868. /*------------------------------------- typedef viSectDistrib -----*/
  1869. /*  For each defined distribution channel, one of these structures */
  1870. /*  specifies the distribution requirements of the product.        */
  1871. /*-----------------------------------------------------------------*/
  1872. #define  vivDistDataCount            6
  1873. typedef struct {
  1874.    long         vidDistFlags;                            /* d?m? b */
  1875.    word         vidDistData [ vivDistDataCount ];        /* d?d?   */
  1876.    char         vidDistAddlReqs [ vivLenMisc1 ];         /* d?a  s */
  1877. } viSectDistrib;   /* 36 fields, 97 bytes */
  1878.  
  1879. /*----------------- distribution types/channels (see dist[i]) -----*/
  1880. /*  The distribution channels currently defined are:               */
  1881. /*    Bbs  -- to End User by BBS                                   */
  1882. /*    Fdn  -- to BBSes by File-Distribution Network                */
  1883. /*    DiskVend  -- to End User by Mail-Order Disk Vendor           */
  1884. /*    Cdrom  -- by CD-ROM (other than File-Distribution Network)   */
  1885. /*    OneRack  -- to End User by Single-Site Rack                  */
  1886. /*    Rack  -- to Seller by Rackware Distributor                   */
  1887. /*    Book  -- to End User in Book Enclosure Diskette              */
  1888. /*    Subscrip  -- to End User by Subscription Service             */
  1889. /*    Magazine  -- to End User by Magazine "Cover" Disk            */
  1890. /*    Broadcast -- to End User by TV/Cable/Satellite Broadcast     */
  1891. /*    Phone900  -- to End User by 1-900-Type Phone Service         */
  1892. /*    Install  -- Installation by Distributor on User's Machine    */
  1893. /*    Undesc  -- Distribution by Substantially Different Means     */
  1894. /*-----------------------------------------------------------------*/
  1895. #define  vivDistChanBbs                   0               /* db... */
  1896. #define  vivDistChanFdn                   1               /* df... */
  1897. #define  vivDistChanDiskVend              2               /* dd... */
  1898. #define  vivDistChanCdrom                 3               /* dc... */
  1899. #define  vivDistChanOneRack               4               /* do... */
  1900. #define  vivDistChanRack                  5               /* dr... */
  1901. #define  vivDistChanBook                  6               /* dk... */
  1902. #define  vivDistChanSubscrip              7               /* ds... */
  1903. #define  vivDistChanMagazine              8               /* dm... */
  1904. #define  vivDistChanTvBroadcast           9               /* dt... */
  1905. #define  vivDistChanPhone900              10              /* dp... */
  1906. #define  vivDistChanInstall               11              /* di... */
  1907. #define  vivDistChanUndesc                12              /* du... */
  1908. #define  vivDistChanCount            13
  1909.  
  1910. /*----------------------- specific-channel distribution flags -----*/
  1911. /*  vidDistFlags records a set of boolean values indicating        */
  1912. /*  various distribution policies for a particular distribution    */
  1913. /*  channel.  The overall approach taken here is to allow the      */
  1914. /*  author to specify the following, in order:                     */
  1915. /*     1. Who falls in the "qualifying" distributor set?           */
  1916. /*     2. What actions remove a distributor from the "qualifiers"? */
  1917. /*     3. Do qualifiers still require written permission, or can   */
  1918. /*        they distribute the product based on being qualifiers?   */
  1919. /*     4. If qualifiers need no written permission, are other      */
  1920. /*        distributors allowed to distribute WITH PERMISSION, or   */
  1921. /*        are they prohibited from distributing altogether?        */
  1922. /*        (The point of this question is to help a non-qualifying  */
  1923. /*        distributor know whether to review a product and request */
  1924. /*        permission, or to ignore the product altogether.)        */
  1925.  
  1926.                  /*   Distribution Section (cont.)    */
  1927.  
  1928. /*  Definitions are:                                               */
  1929. /*     Prohib -- Distribution via this channel is prohibited.      */
  1930. /*     Any -- Any distributor falls in the "qualifying" set (but   */
  1931. /*                     may still drop out of that group if         */
  1932. /*                     engaged in disqualifying actions.)          */
  1933. /*     AnyAsp -- Any distributor who is an ASP member (in the      */
  1934. /*                     membership class relevant this channel)     */
  1935. /*                     qualifies.  The point of this choice is     */
  1936. /*                     that ASP distributor members agree to       */
  1937. /*                     certain advertising and business practices  */
  1938. /*                     (and are monitored for compliance), and     */
  1939. /*                     some authors (ASP members or not) therefore */
  1940. /*                     grant permission to these distributors      */
  1941. /*                     without further investigation.              */
  1942. /*     AnyDisclose -- Any distributor qualifies if he agrees to    */
  1943. /*                     inform customer: (1) that product is        */
  1944. /*                     shareware, (2) what shareware is, (3) that  */
  1945. /*                     he claims no ownership rights in the        */
  1946. /*                     product, and (4) that separate payment is   */
  1947. /*                     required if product is used other than for  */
  1948. /*                     author-specified evaluation period.         */
  1949. /*     AnyUG -- Any user group qualifies.                          */
  1950. /*     AnyNonProfUG -- Any non-profit user group qualifies.        */
  1951. /*     AnyConsult -- Any consultant, who charges user for software */
  1952. /*                     evaluation and installation services,       */
  1953. /*                     qualifies.                                  */
  1954. /*     AnyHardware -- Any hardware dealer, who charges user for    */
  1955. /*                     hardware and installs product on it,        */
  1956. /*                     qualifies.                                  */
  1957. /*     AnyRecFromAuth -- Any distributor who has received the      */
  1958. /*                     product directly from the author, or in a   */
  1959. /*                     mailing done by the author's direct agent,  */
  1960. /*                     qualifies.                                  */
  1961. /*     NoIfAnyCharge -- A distributor is disqualified if he        */
  1962. /*                     charges the customer in any way.            */
  1963. /*     NoIfPerYear -- A distributor is disqualified if he charges  */
  1964. /*                     a subscription fee exceeding the rate in    */
  1965. /*                     vivDistDataPerYear.                         */
  1966. /*     NoIfPerProg -- A distributor is disqualified if he charges  */
  1967. /*                     more per program than the rate in           */
  1968. /*                     vivDistDataPerProg.                         */
  1969. /*     NoIfPer360K -- A distributor is disqualified if he charges  */
  1970. /*                     by diskette, connect time hour, or other    */
  1971. /*                     volume measure, more than the rate          */
  1972. /*                     in vivDistDataPer360K.                      */
  1973. /*     NoIfPerCdrom -- A distributor is disqualified if he charges */
  1974. /*                     more for the CD-ROM on which product is     */
  1975. /*                     being distributed than the rate in          */
  1976. /*                     vivDistDataPerCdrom.                        */
  1977. /*     NoIfBbsMailDisk -- Distribution by this (BBS) channel is    */
  1978. /*                     prohibited if sysop mails disk in lieu of   */
  1979. /*                     download.                                   */
  1980. /*     NoIfCdrom -- Distribution by this channel is prohibited if  */
  1981. /*                     done by CD-ROM (FDN channel only).          */
  1982. /*     NoIfOtherMass -- Distribution by this channel is prohibited */
  1983. /*                     if done by mass medium other than CD-ROM,   */
  1984. /*                     such as bulk tape (FDN channel only).       */
  1985.  
  1986.                  /*   Distribution Section (cont.)    */
  1987.  
  1988. /*     NoIfTargetBbs -- Distribution by this (CD-ROM) channel is   */
  1989. /*                     prohibited if the CD-ROM is targetted at    */
  1990. /*                     BBS Sysops (e.g., set up to support         */
  1991. /*                     mounting of CD-ROM on BBS, marketed to      */
  1992. /*                     Sysops, etc.)                               */
  1993. /*     NoIfTargetDistrib -- Distribution by this (CD-ROM) channel  */
  1994. /*                     is prohibited if the CD-ROM is targetted at */
  1995. /*                     shareware distributors (e.g., "vendor in a  */
  1996. /*                     box" kits, retail-store vending machines,   */
  1997. /*                     etc.)                                       */
  1998. /*     NoIfTargetBbs -- Distribution by this (CD-ROM) channel is   */
  1999. /*                     prohibited if the CD-ROM is targetted at    */
  2000. /*                     End Users.                                  */
  2001. /*     PermIfQual -- Distributors in "qualifying" set must still   */
  2002. /*                     have written permission.                    */
  2003. /*     PermIfDisqual -- Distributors not in qualifying set may     */
  2004. /*                     still distribute product if they obtain     */
  2005. /*                     written permission.  Please note that the   */
  2006. /*                     author ALWAYS has the right to allow a      */
  2007. /*                     distribution by written permission,         */
  2008. /*                     regardless of the restrictions in the       */
  2009. /*                     VENDINFO record.  This field is here to     */
  2010. /*                     help the "non-qualifying" distributor       */
  2011. /*                     determine whether or not it's worth the     */
  2012. /*                     trouble to request written permission.      */
  2013. /*     NoIfDisqual -- Distributors not in qualifying set are not   */
  2014. /*                     allowed to distribute by this channel.      */
  2015. /*                     This field is actually redundant, but is in */
  2016. /*                     the record to remove any possible ambiguity */
  2017. /*                     regarding distribution rights.              */
  2018. /*     HiDensRequired -- Distribution on diskette may be done only */
  2019. /*                     on high-density diskettes.                  */
  2020. /*     NotifVersRequired -- Distributor who is operating without   */
  2021. /*                     written permission must notify author /     */
  2022. /*                     publisher of distribution and indicate the  */
  2023. /*                     version being distributed.                  */
  2024. /*     SampleRequired -- Distributor who is operating without      */
  2025. /*                     written permission must send an appropriate */
  2026. /*                     sample of the distributed product to the    */
  2027. /*                     author.  For mail-order disk vendors, this  */
  2028. /*                     means a copy of the catalog in which the    */
  2029. /*                     product is listed; for distribution by      */
  2030. /*                     other means it is a copy of the actual      */
  2031. /*                     material distributed, such as the rack      */
  2032. /*                     package, CD-ROM, magazine, book, etc.       */
  2033. /*     SampleRequested -- Author requests, but does not require,   */
  2034. /*                     a sample as described above.                */
  2035. /*     Royalty -- When distribution is done via this channel, a    */
  2036. /*                     royalty payment is required.  See royalty   */
  2037. /*                     information in the General section for more */
  2038. /*                     information about royalty amounts or        */
  2039. /*                     procedure.                                  */
  2040. /*     HasContactDate -- There is a date (vivDistDataContactDate)  */
  2041. /*                     beyond which distributor must check with    */
  2042. /*                     author for current version before           */
  2043. /*                     distributing by this channel.               */
  2044. /*     HasProhibDate -- There is a date beyond which distribution  */
  2045. /*                     of this version by this channel is not      */
  2046. /*                     allowed.                                    */
  2047. /*     HasAddlReqs -- There are additional requirements governing  */
  2048. /*                     distribution by this channel, in the        */
  2049. /*                     vidDistAddlReqs field.                      */
  2050.  
  2051.                  /*   Distribution Section (cont.)    */
  2052.  
  2053. /*     SeeText -- There are additional requirements governing      */
  2054. /*                     distribution by this channel in the human-  */
  2055. /*                     readable portion of the VENDINFO.DIZ file.  */
  2056. /*-----------------------------------------------------------------*/
  2057. #define  vibDistProhib                    0x00000001    /* d?mp  b */
  2058. #define  vibDistAny                       0x00000002    /* d?ma  b */
  2059. #define  vibDistAnyAsp                    0x00000004    /* d?maa b */
  2060. #define  vibDistAnyDisclose               0x00000008    /* d?mad b */
  2061. #define  vibDistAnyUG                     0x00000010    /* d?mau b */
  2062. #define  vibDistAnyNonProfUG              0x00000020    /* d?man b */
  2063. #define  vibDistAnyConsult                0x00000040    /* d?mac b */
  2064. #define  vibDistAnyHardware               0x00000080    /* d?mah b */
  2065. #define  vibDistAnyRecFromAuth            0x00000100    /* d?mar b */
  2066. #define  vibDistNoIfAnyCharge             0x00000200    /* d?mna b */
  2067. #define  vibDistNoIfPerYear               0x00000400    /* d?mny b */
  2068. #define  vibDistNoIfPerProg               0x00000800    /* d?mnp b */
  2069. #define  vibDistNoIfPer360K               0x00001000    /* d?mnk b */
  2070. #define  vibDistNoIfPerCdrom              0x00002000    /* d?mnc b */
  2071.  
  2072. /*----- The following fields are channel-specific, and are --------*/
  2073. /*----- allowed to have overlapping values                 --------*/
  2074. #define  vibDistNoIfBbsMailDisk           0x00004000    /* d?mnm b */
  2075. #define  vibDistNoIfCdrom                 0x00004000    /* d?mnr b */
  2076. #define  vibDistNoIfOtherMass             0x00008000    /* d?mno b */
  2077. #define  vibDistNoIfTargetBbs             0x00004000    /* d?mnb b */
  2078. #define  vibDistNoIfTargetDistrib         0x00008000    /* d?mng b */
  2079. #define  vibDistNoIfTargetUser            0x00010000    /* d?mnu b */
  2080.  
  2081. #define  vibDistPermIfQual                0x00020000    /* d?mpq b */
  2082. #define  vibDistPermIfDisqual             0x00040000    /* d?mpd b */
  2083. #define  vibDistNoIfDisqual               0x00080000    /* d?mnd b */
  2084. #define  vibDistHiDensRequired            0x00100000    /* d?mh  b */
  2085. #define  vibDistNotifVersRequired         0x00200000    /* d?mv  b */
  2086. #define  vibDistSampleRequired            0x00400000    /* d?msr b */
  2087. #define  vibDistSampleRequested           0x00800000    /* d?msq b */
  2088. #define  vibDistRoyalty                   0x01000000    /* d?mr  b */
  2089. #define  vibDistHasContactDate            0x02000000    /* d?mdc b */
  2090. #define  vibDistHasProhibDate             0x04000000    /* d?mdp b */
  2091. #define  vibDistHasAddlReqs               0x08000000    /* d?maq b */
  2092. #define  vibDistSeeText                   0x10000000    /* d?mst b */
  2093.  
  2094.                  /*   Distribution Section (cont.)    */
  2095.  
  2096. /*------------------specific-channel distribution data fields -----*/
  2097. /*  These constants indicate the meanings of the variables in the  */
  2098. /*  vidData array.  Definitions are:                               */
  2099. /*       PerYear -- subscription of membership charge made by      */
  2100. /*                     distributor to user, calculated on annual   */
  2101. /*                     basis no matter how charged, and expressed  */
  2102. /*                     in U.S. dollars.                            */
  2103. /*       PerProg -- charge made by distributor for individual      */
  2104. /*                     product, in U.S. dollars.                   */
  2105. /*       Per360K -- charge made by distributor to user by volume   */
  2106. /*                     of information conveyed, such as per        */
  2107. /*                     diskette or per download hour, calculated   */
  2108. /*                     on the basis of 360K units no matter how    */
  2109. /*                     charged, and expressed in U.S. dollars.     */
  2110. /*       PerCdrom -- retail price of CD-ROM on which program is    */
  2111. /*                     distributed, in U.S. dollars.               */
  2112. /*       ContactDate -- date after which distributor must contact  */
  2113. /*                     author for new version, or to verify that   */
  2114. /*                     this version is current, before initiating  */
  2115. /*                     any distribution of this product.           */
  2116. /*       ProhibDate -- date after which all distribution of this   */
  2117. /*                     version by the indicated channel is         */
  2118. /*                     prohibited.                                 */
  2119. /*-----------------------------------------------------------------*/
  2120. #define  vivDistDataPerYear               0              /* d?dy p */
  2121. #define  vivDistDataPerProg               1              /* d?dp p */
  2122. #define  vivDistDataPer360K               2              /* d?dk p */
  2123. #define  vivDistDataPerCdrom              3              /* d?dc p */
  2124. #define  vivDistDataContactDate           4              /* d?dt s */
  2125. #define  vivDistDataProhibDate            5              /* d?dd s */
  2126.  
  2127.                   /************************************/
  2128.                   /*  VENDINFO Main Record Structure  */
  2129.                   /************************************/
  2130.  
  2131. /*---------------------------------- typedef viVendinfoRecord -----*/
  2132. /*  This is the fixed-length portion of the compressed data        */
  2133. /*  record in VENDINFO.DIZ.  It contains sections corresponding    */
  2134. /*  to the various major categories of information in the record,  */
  2135. /*  and ends with a single byte that indicates the type, if any,   */
  2136. /*  of the first record extension.                                 */
  2137. /*-----------------------------------------------------------------*/
  2138. typedef struct {
  2139.    viSectHeader  head;                         /*  11 fields,    45 bytes */
  2140.    viSectProduct prod;                         /* 100 fields,  4315 bytes */
  2141.    viSectAuthor  auth;                         /*  25 fields,   797 bytes */
  2142.    viSectOrder   ordr;                         /*  45 fields,   912 bytes */
  2143.    viSectPrices  pric;                         /*  96 fields,   488 bytes */
  2144.    viSectSupport supp;                         /*  16 fields,   724 bytes */
  2145.    viSectGeneral genl;                         /*  25 fields,   573 bytes */
  2146.    viSectDistrib dist [ vivDistChanCount ];    /* 468 fields,  1261 bytes */
  2147.    byte          vidRecExtensionType;          /*                 1 byte  */
  2148. } viVendinfoRecord;                            /* 786    fields,  9116 bytes */
  2149.  
  2150.                 /****************************************/
  2151.                 /*  Extensions to VENDINFO Main Record  */
  2152.                 /****************************************/
  2153.  
  2154. /*--------------------------- record extension identifiers () -----*/
  2155. /*  The last byte of the fixed-length data record is a record      */
  2156. /*  extension indicator.  If its value is zero, the data record    */
  2157. /*  has no extensions.  Otherwise, the byte represents the type of */
  2158. /*  the first extension record, which begins in the next byte.     */
  2159. /*  Each extension record is of fixed length, followed by a single */
  2160. /*  byte which is once again a record extension indicator.  By     */
  2161. /*  this means, any number of extensions, of potentially varying   */
  2162. /*  types, are possible.  At present, the only extension type is   */
  2163. /*  that concerned with defining a distributor for a specific      */
  2164. /*  geographical region.                                           */
  2165. /*-----------------------------------------------------------------*/
  2166. #define  vivRecExtensionNone              0     
  2167. #define  vivRecExtensionRegionalDist      1     
  2168.  
  2169. /*------------------------------------ typedef viRegionalDist -----*/
  2170. /*  Multiple instances of this record can appear as record         */
  2171. /*  extensions to the VENDINFO fixed-length data record.  Each of  */
  2172. /*  these represents information about a distributor authorized by */
  2173. /*  the author to represent the product (usually, but not always,  */
  2174. /*  in a specific geographical area).  These arrangements need not */
  2175. /*  be exclusive.  The point is to make contact information        */
  2176. /*  available to potential customers (and perhaps other            */
  2177. /*  distributors, if applicable) in the region.                    */
  2178. /*-----------------------------------------------------------------*/
  2179. typedef struct {
  2180.    char         vidRegionCovered [ vivLenAddress ];      /* r?r  s */
  2181.    char         vidRegionAddress [ 6 ] [ vivLenAddress ];/* r?a  t */
  2182.    char         vidRegionPhoneTollFree [ vivLenPhone ];  /* r?t  s */
  2183.    char         vidRegionPhone [ vivLenPhone ];          /* r?p  s */
  2184.    char         vidRegionFax [ vivLenPhone ];            /* r?f  s */
  2185.    byte         vidRegionMiscFlags;  /* vibRegion... */  /* r?m? b */
  2186.    word         vidRegionCredit; /* Order vibCredit...*/ /* r?c? b */
  2187.    long         vidRegionFunds;    /* Order vibPay... */ /* r?x? b */
  2188.    char         vidRegionCurrency [ vivLenCurrency ];    /* r?c  s */
  2189.    Price        vidRegionPrice[2]; /* min, max */        /* r?i? p */
  2190.    Price        vidRegionPriceShip [ vivPriceShipCount]; /* r?s? p */
  2191.                                 /* see vivPriceShip... */
  2192.    byte         vidRecExtensionType;
  2193. } viRegionalDist;   /* 41 fields, 342 bytes */
  2194.  
  2195. /*--------------------------------- regional distributor info -----*/
  2196. /*  vidRegionMiscFlags contains several boolean variables defining */
  2197. /*  specific aspects of the service provided by the regional       */
  2198. /*  distributor in his defined geographical region.                */
  2199. /*-----------------------------------------------------------------*/
  2200. #define  vibRegionHandlesSupport          0x0001         /* r?ms b */
  2201. #define  vibRegionHandlesSoleSupport      0x0002         /* r?mo b */
  2202. #define  vibRegionHandlesOtherDist        0x0004         /* r?md b */
  2203. #define  vibRegionHandlesPress            0x0008         /* r?mj b */
  2204. #define  vibRegionAuthorDropShips         0x0010         /* r?ma b */
  2205. #define  vibRegionEnableCreditFunds       0x0020         /* r?mc b */
  2206. #define  vibRegionEnablePrices            0x0040         /* r?mp b */
  2207.  
  2208.  
  2209.                 /***************************************/
  2210.                 /*  VENDINFO Secondary File Structure  */
  2211.                 /***************************************/
  2212.  
  2213. /*-------------------------------------- typedef viSectHeader -----*/
  2214. /*  Secondary VENDINFO records contain an abbreviated human-       */
  2215. /*  readable text portion (as discussed earlier).  Record          */
  2216. /*  extensions are omitted.  The entire fixed-length VENDINFO      */
  2217. /*  record is included, in its usual, compressed form.  This       */
  2218. /*  allows automated processing of the individual distribution     */
  2219. /*  packages independently of one another, while eliminating most  */
  2220. /*  of the truly redundant information from the secondary records. */
  2221. /*-----------------------------------------------------------------*/
  2222.  
  2223.                /******************************************/
  2224.                /*  VENDINFO Executable Record Structure  */
  2225.                /******************************************/
  2226.  
  2227. /*------------------------------- executable record structure -----*/
  2228. /*  This whole area is still under development.  The following is  */
  2229. /*  strictly a DRAFT, intended to convey the basic idea, and to    */
  2230. /*  allow comment.  It will be modified and finalized in a later   */
  2231. /*  version of this standard.                                      */
  2232. /*                                                                 */
  2233. /*  This is a short VENDINFO record that can optionally be added   */
  2234. /*  to executable programs.  It is created by the editor, and      */
  2235. /*  either appended by the editor or output in source-includable   */
  2236. /*  form.  The processor can scan executables for the presence of  */
  2237. /*  such records, and can detect some types of inappropriate or    */
  2238. /*  illegal distributions.  There is also a security feature that  */
  2239. /*  allows the executable record to provide an extra layer of      */
  2240. /*  security for the VENDINFO.DIZ record.  Since the executable    */
  2241. /*  record is INSIDE any security provided for the executable      */
  2242. /*  program itself (e.g., a CRC check), this can be a substantial  */
  2243. /*  form of protection against hacking or elimination of the       */
  2244. /*  VENDINFO record itself, at a cost of four bytes.               */
  2245. /*                                                                 */
  2246. /*  There are three different forms of the VENDINFO executable     */
  2247. /*  record.  There is a basic record, present in all cases.  Then, */
  2248. /*  for products in the "Shareware, Restricted Distribution"       */
  2249. /*  category, there is an additional section containing the        */
  2250. /*  product's channel-specific distribution restrictions.  This    */
  2251. /*  second portion of the record can have either a very brief form */
  2252. /*  or a complete form, at the discretion of the author.           */
  2253. /*-----------------------------------------------------------------*/
  2254.  
  2255. /*-------------------------------- typedef viExePrimaryRecord -----*/
  2256. /*  This portion of the record is always present.  The last part   */
  2257. /*  of this record contains four character strings.  Those strings */
  2258. /*  are actually stored in byte-count-first form, and must be      */
  2259. /*  extracted from the record dynamically.  They are shown below   */
  2260. /*  (in a comment) as if they were fixed-length fields, just to    */
  2261. /*  make clear their meanings and length limits.  As a concrete    */
  2262. /*  example, the product name "InContext" would be stored starting */
  2263. /*  in the next byte after vidExeAuthentKeyVI, and would take 10   */
  2264. /*  bytes.  The first byte would be the length of the string (9)   */
  2265. /*  and the remaining 9 bytes would contain the string itself,     */
  2266. /*  with no terminating null.                                      */
  2267. /*                                                                 */
  2268. /*  The vidExeType field actually contains several pieces of type  */
  2269. /*  and status information.  It is a byte whose bit structure is:  */
  2270. /*       76543210                                                  */
  2271. /*       x.......  For shareware with distribution restrictions,   */
  2272. /*                 this bit indicates that the long version of the */
  2273. /*                 distribution policy is included.                */
  2274. /*       .x......  This bit indicates that this executable is not  */
  2275. /*                 to be distributed without an accompanying       */
  2276. /*                 VENDINFO.DIZ file.                              */
  2277. /*       ..x.....  This bit indicates that this VENDINFO record    */
  2278. /*                 contains an authenticity key identifying the    */
  2279. /*                 accompanying VENDINFO.DIZ file.                 */
  2280. /*       ...xxxxx  These bits indicate the product distribution    */
  2281. /*                 category in which this executable falls, as     */
  2282. /*                 outlined in the vidGenlDistType field in the    */
  2283. /*                 main VENDINFO record.                           */
  2284.  
  2285.           /*  VENDINFO Executable Record Structure (cont.)  */
  2286.  
  2287. /*  NOTE: if the author wishes to use an "executable branding"     */
  2288. /*  scheme, to mark an evaluation version as registered when the   */
  2289. /*  user enters a valid registration number, s/he need only change */
  2290. /*  the *5-bit* value of the distribution category field to        */
  2291. /*  vivGenlTypeShareRegistered.  Programs that interpret VENDINFO  */
  2292. /*  records are required to correctly handle such records, even if */
  2293. /*  the remainder of the executable record is that normally seen   */
  2294. /*  only for products in the vivGenlTypeShareRestricted category.  */
  2295. /*  The author should make appropriate corrections for any CRC     */
  2296. /*  or other security schemes protecting the executable.  Note     */
  2297. /*  also that the first three bits of the vidExeType field         */
  2298. /*  should not be altered.                                         */
  2299. /*-----------------------------------------------------------------*/
  2300. typedef struct {
  2301.    char          vidExeViString[12];
  2302.    word          vidExeViVersion;
  2303.    byte          vidExeType;
  2304.    Date          vidExeVersionDate;
  2305.    long          vidExeCrc;
  2306.    long          vidExeUserId;
  2307.    long          vidExeAuthentKey1;
  2308.    long          vidExeAuthentKey2;
  2309.    long          vidExeAuthentKeyVI;
  2310.    char          vidExeProdName[16];
  2311.    char          vidExeVersion[5];
  2312.    char          vidExeCompanyName[41];
  2313.    char          vidExeQueriesPhone[20];
  2314. } viExePrimaryRecord;        /* 119 bytes */
  2315.  
  2316. /*--------------------------------- typedef viExeDistribShort -----*/
  2317. /*  The brief version of the distribution record contains only a   */
  2318. /*  single bit of information for each distribution channel.       */
  2319. /*  That bit is obtainined by ORing the values, for the channel in */
  2320. /*  question, of vibDistProhib and vibDistPermIfQual.  Thus, the   */
  2321. /*  the bit is set if distribution is prohibited for the channel   */
  2322. /*  or if all qualifying distributors are still required to        */
  2323. /*  obtain written permission.  The meaning of this bit is thus:   */
  2324. /*  if you have written permission from the author, it's OK to     */
  2325. /*  distribute by this channel; otherwise, it's not.  If this bit  */
  2326. /*  is *not* set, then it's simply not possible to determine from  */
  2327. /*  this abbreviated information whether or not distribution is    */
  2328. /*  OK.  In order to convey substantially more detail about the    */
  2329. /*  permissions, a good deal more information is needed, so        */
  2330. /*  there's not a clearly useful alternative short of the full     */
  2331. /*  distribution record.  Most authors will probably choose the    */
  2332. /*  long version, but this version is provided for those highly    */
  2333. /*  concerned about the amount of information added to the         */
  2334. /*  executable record.                                             */
  2335. /*-----------------------------------------------------------------*/
  2336. typedef struct {
  2337.     word          vidExeDistChanPermReqd;
  2338. } viExeDistribShort;            /* 2 bytes */
  2339.  
  2340.           /*  VENDINFO Executable Record Structure (cont.)  */
  2341.  
  2342. /*---------------------------------- typedef viExeDistribLong -----*/
  2343. /*  The long version of the distribution record contains all the   */
  2344. /*  information in the distribution section of the main record,    */
  2345. /*  and the information is laid out in the same order.  However,   */
  2346. /*  the record is abbreviated because missing values are excluded, */
  2347. /*  and because strings, when present, are in byte-count-first     */
  2348. /*  format.  Specifically, the information about each channel      */
  2349. /*  appears together, in the order indicated in viSectDistrib.     */
  2350. /*  However, the six data values (vidDistData) and the             */
  2351. /*  vidDistAddlReqs string appear only if the corresponding bits   */
  2352. /*  (vibDistNoIfPerYear, vibDistNoIfPerProg, vibDistNoIfPer360K,   */
  2353. /*  vibDistNoIfPerCdrom, vibDistHasContactDate,                    */
  2354. /*  vibDistHasProhibDate, vibDistHasAddlReqs) are on.              */
  2355. /*-----------------------------------------------------------------*/
  2356. typedef struct {
  2357.    viSectDistrib dist [ vivDistChanCount ];
  2358. } viExeDistribLong;            /* 1261 bytes */
  2359.  
  2360.                      /*****************************/
  2361.                      /*  Distribution Flag Masks  */
  2362.                      /*****************************/
  2363.  
  2364. /*----------------------------------- distribution flag masks -----*/
  2365. /*  These words contain OR'd flags defining the applicability of   */
  2366. /*  the distribution flags to the various distribution types.  For */
  2367. /*  example, the "vidDistAnyConsult" flag is relevant to direct    */
  2368. /*  installation of the product on the user's machine, but not to  */
  2369. /*  BBS distribution.  Tools that create or use VENDINFO.DIZ files */
  2370. /*  are required to use these masks to eliminate from              */
  2371. /*  consideration any distribution flags that do not apply to the  */
  2372. /*  particular channel.                                            */
  2373. /*                                                                 */
  2374. /*  For clarity, the definitions of these flag masks are organized */
  2375. /*  in the following way, by line:                                 */
  2376. /*        Prohibited                                               */
  2377. /*        Qualifiers                                               */
  2378. /*        Disqualifiers                                            */
  2379. /*        Permission applicability                                 */
  2380. /*        Hi-density/notification/catalog requirements             */
  2381. /*        Royalties                                                */
  2382. /*        Dates                                                    */
  2383. /*        Additional requirements                                  */
  2384. /*-----------------------------------------------------------------*/
  2385. EXTERN   long   vidDistFlagMasks [ vivDistChanCount ]
  2386. #ifdef VENDINFO_MAIN
  2387.    = {
  2388.    /* BBS */
  2389.       vibDistProhib +
  2390.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2391.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2392.       vibDistNoIfAnyCharge + vibDistNoIfPerYear + vibDistNoIfPerProg +
  2393.          vibDistNoIfPer360K + vibDistNoIfBbsMailDisk +
  2394.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2395.       vibDistNotifVersRequired +
  2396.       0 +
  2397.       vibDistHasContactDate + vibDistHasProhibDate +
  2398.       vibDistHasAddlReqs + vibDistSeeText,
  2399.  
  2400.    /* BBS file-distribution net */
  2401.       vibDistProhib +
  2402.       vibDistAny + vibDistAnyRecFromAuth +
  2403.       vibDistNoIfCdrom + vibDistNoIfOtherMass +
  2404.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2405.       vibDistNotifVersRequired +
  2406.       0 +
  2407.       vibDistHasContactDate + vibDistHasProhibDate +
  2408.       vibDistHasAddlReqs + vibDistSeeText,
  2409.  
  2410.    /* mail-order disk vendor */
  2411.       vibDistProhib +
  2412.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2413.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2414.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2415.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2416.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2417.          vibDistSampleRequired + vibDistSampleRequested +
  2418.       vibDistRoyalty +
  2419.       vibDistHasContactDate + vibDistHasProhibDate +
  2420.       vibDistHasAddlReqs + vibDistSeeText,
  2421.  
  2422.                  /*  Distribution Flag Masks (cont.)  */
  2423.  
  2424.    /* CD-ROM other than BBS file-distribution network */
  2425.       vibDistProhib +
  2426.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2427.          vibDistAnyRecFromAuth +
  2428.       vibDistNoIfPerCdrom +
  2429.          vibDistNoIfTargetBbs + vibDistNoIfTargetDistrib +
  2430.          vibDistNoIfTargetUser +
  2431.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2432.       vibDistNotifVersRequired + vibDistSampleRequired +
  2433.          vibDistSampleRequested +
  2434.       vibDistRoyalty +
  2435.       vibDistHasContactDate + vibDistHasProhibDate +
  2436.       vibDistHasAddlReqs + vibDistSeeText,
  2437.  
  2438.    /* one-site rack vendor */
  2439.       vibDistProhib +
  2440.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2441.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2442.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2443.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2444.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2445.          vibDistSampleRequired + vibDistSampleRequested +
  2446.       vibDistRoyalty +
  2447.       vibDistHasContactDate + vibDistHasProhibDate +
  2448.       vibDistHasAddlReqs + vibDistSeeText,
  2449.  
  2450.    /* rack distributor */
  2451.       vibDistProhib +
  2452.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2453.          vibDistAnyRecFromAuth +
  2454.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2455.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2456.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2457.          vibDistSampleRequired + vibDistSampleRequested +
  2458.       vibDistRoyalty +
  2459.       vibDistHasContactDate + vibDistHasProhibDate +
  2460.       vibDistHasAddlReqs + vibDistSeeText,
  2461.  
  2462.    /* book enclosure */
  2463.       vibDistProhib +
  2464.       vibDistAny + vibDistAnyRecFromAuth +
  2465.       0 +
  2466.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2467.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2468.          vibDistSampleRequired + vibDistSampleRequested +
  2469.       vibDistRoyalty +
  2470.       vibDistHasContactDate + vibDistHasProhibDate +
  2471.       vibDistHasAddlReqs + vibDistSeeText,
  2472.  
  2473.    /* subscription service */
  2474.       vibDistProhib +
  2475.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2476.          vibDistAnyRecFromAuth +
  2477.       vibDistNoIfPerYear + vibDistNoIfPerProg + vibDistNoIfPer360K +
  2478.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2479.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2480.          vibDistSampleRequired + vibDistSampleRequested +
  2481.       vibDistRoyalty +
  2482.       vibDistHasContactDate + vibDistHasProhibDate +
  2483.       vibDistHasAddlReqs + vibDistSeeText,
  2484.  
  2485.                  /*  Distribution Flag Masks (cont.)  */
  2486.  
  2487.    /* magazine cover disk */
  2488.       vibDistProhib +
  2489.       vibDistAny + vibDistAnyRecFromAuth +
  2490.       0 +
  2491.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2492.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2493.          vibDistSampleRequired + vibDistSampleRequested +
  2494.       vibDistRoyalty +
  2495.       vibDistHasContactDate + vibDistHasProhibDate +
  2496.       vibDistHasAddlReqs + vibDistSeeText,
  2497.  
  2498.    /* broadcast by TV/cable/satellite/etc. */
  2499.       vibDistProhib +
  2500.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2501.          vibDistAnyRecFromAuth +
  2502.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2503.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2504.       vibDistNotifVersRequired +
  2505.       vibDistRoyalty +
  2506.       vibDistHasContactDate + vibDistHasProhibDate +
  2507.       vibDistHasAddlReqs + vibDistSeeText,
  2508.  
  2509.    /* 1-900 phone-type service */
  2510.       vibDistProhib +
  2511.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2512.          vibDistAnyRecFromAuth +
  2513.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2514.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2515.       vibDistNotifVersRequired +
  2516.       vibDistRoyalty +
  2517.       vibDistHasContactDate + vibDistHasProhibDate +
  2518.       vibDistHasAddlReqs + vibDistSeeText,
  2519.  
  2520.    /* installation on user's machine by paid consultant, VAR, etc. */
  2521.       vibDistProhib +
  2522.       vibDistAny + vibDistAnyDisclose + vibDistAnyConsult +
  2523.          vibDistAnyHardware + vibDistAnyRecFromAuth +
  2524.       0 +
  2525.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2526.       vibDistNotifVersRequired +
  2527.       vibDistRoyalty +
  2528.       vibDistHasContactDate + vibDistHasProhibDate +
  2529.       vibDistHasAddlReqs + vibDistSeeText,
  2530.  
  2531.    /* distribution by substantially different method */
  2532.       vibDistProhib +
  2533.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2534.          vibDistAnyRecFromAuth +
  2535.       0 +
  2536.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2537.       vibDistNotifVersRequired +
  2538.          vibDistSampleRequired + vibDistSampleRequested +
  2539.       vibDistRoyalty +
  2540.       vibDistHasContactDate + vibDistHasProhibDate +
  2541.       vibDistHasAddlReqs + vibDistSeeText
  2542.    }
  2543. #endif
  2544.    ;
  2545. #endif   /* __VENDINFO_H */
  2546.  
  2547.               /****************************************/
  2548.               /*  Standards Applicable to Programs    */
  2549.               /*  that Create or Use VENDINFO Records */
  2550.               /****************************************/
  2551.  
  2552. /*------------------------------------------- tools standards -----*/
  2553. /*  This standard is mainly about the file format for VENDINFO.DIZ */
  2554. /*  files, with minor additional record-format information.  It is */
  2555. /*  also important, though, to establish some common understand-   */
  2556. /*  ings about tools.  In some cases, these understandings serve   */
  2557. /*  to clarify the division of responsibility between tools that   */
  2558. /*  create VENDINFO records and tools that use them.  In other     */
  2559. /*  cases, these tools standards specify tools behavior necessary  */
  2560. /*  to support the mutual understandings of the authors and the    */
  2561. /*  distributors who use the VENDINFO system.                      */
  2562. /*                                                                 */
  2563. /*  Software developers who create tools that use VENDINFO records */
  2564. /*  can automatically satisfy most of these requirements by using  */
  2565. /*  the standard VENDINFO software developer's library.            */
  2566. /*                                                                 */
  2567. /*  This section is still under development, and will probably     */
  2568. /*  be expanded in the final version.                              */
  2569. /*-----------------------------------------------------------------*/
  2570.  
  2571. /*------------------------------------------------ null bytes -----*/
  2572. /*  Tools that create VENDINFO records are required to place a     */
  2573. /*  null value (0x00) in all unused bytes of the compressed        */
  2574. /*  VENDINFO data record, in order to maximize the degree to which */
  2575. /*  the record can be compressed.  This means, for example, that a */
  2576. /*  fixed-length string field would have a null byte indicating    */
  2577. /*  the termination of the string, and additional null bytes as    */
  2578. /*  necessary to fill out the string to its full, fixed length.    */
  2579. /*  This also means that the default value for unused fields will  */
  2580. /*  be all zeroes.                                                 */
  2581. /*-----------------------------------------------------------------*/
  2582.  
  2583. /*-------------------------------------------- implied values -----*/
  2584. /*  Wherever a value in one field implies a particular value for   */
  2585. /*  another field, it is the responsibility of the creation tool,  */
  2586. /*  and not the processing tool, to fill the second field with     */
  2587. /*  that value.  For example, if the value of the vibDistAny bit   */
  2588. /*  is TRUE for a given distribution channel, the editor will also */
  2589. /*  set to TRUE the values of the vibDistAnyAsp bit, the           */
  2590. /*  vibDistAnyDisclose bit, etc., since these values are implied.  */
  2591. /*-----------------------------------------------------------------*/
  2592.  
  2593. /*-------------------------------------- equal values if same -----*/
  2594. /*  Whenever there is a provision for multiple sets of similar     */
  2595. /*  values (minimum/maximum, minimum/full, required/recommended,   */
  2596. /*  etc.), all values will be filled in in both sets, even if the  */
  2597. /*  second set can be seen to be inapplicable.  For example, if    */
  2598. /*  there is only one registration price for a shareware product,  */
  2599. /*  both the minimum and maximum viRegPkg structures will be       */
  2600. /*  filled in, using identical values.                             */
  2601. /*-----------------------------------------------------------------*/
  2602.  
  2603. /*--------------------------------------------- known version -----*/
  2604. /*  The VENDINFO file structure may change from version to         */
  2605. /*  version.  Any processing tool is required to check the version */
  2606. /*  field, and to make no attempt to use the record if the version */
  2607. /*  is not "known" to the processor.  An error message and a       */
  2608. /*  distinct return code are recommended in most cases.            */
  2609. /*-----------------------------------------------------------------*/
  2610.  
  2611.           /*  Standards Applicable to Programs (cont.) */
  2612.  
  2613. /*-------------------------- testing for allowed distribution -----*/
  2614. /*  Any program which evaluates the author's distribution policy   */
  2615. /*  for a particular channel is required to employ the following   */
  2616. /*  algorithm:                                                     */
  2617. /*                                                                 */
  2618. /*     1. Apply the channel's Distribution Flag Mask to that       */
  2619. /*        channel's vidDistFlags field, eliminating from all       */
  2620. /*        consideration those bits that do not apply to the        */
  2621. /*        channel in question.  (Also, editors that create the    */
  2622. /*        record are required to apply this mask, insuring that    */
  2623. /*        all irrelevant bits are set FALSE.)                      */
  2624. /*                                                                 */
  2625. /*     2. Determine whether or not the distributor "qualifies",    */
  2626. /*        based upon the distributor's explicit statements about   */
  2627. /*        the proposed distribution.  No assumptions are allowed   */
  2628. /*        here.  For example, in order to qualify via the          */
  2629. /*        vibDistAnyDisclose approach, the distributor must        */
  2630. /*        separately specify satisfaction of each of the defining  */
  2631. /*        conditions (e.g., claims no ownership of product).       */
  2632. /*                                                                 */
  2633. /*     3. If the distributor "qualifies", test all the disqualify- */
  2634. /*        ing conditions specified by the author against the       */
  2635. /*        distributor's explicit statements about the proposed     */
  2636. /*        distribution.  No assumptions are allowed here.  For     */
  2637. /*        example, if the author has specified a limit on          */
  2638. /*        subscription fees (vivDistNoIfPerYear), the distributor  */
  2639. /*        can satisfy this requirement only by specifying the      */
  2640. /*        amount (even if zero) that s/he actually charges per     */
  2641. /*        year.                                                    */
  2642. /*                                                                 */
  2643. /*     4. If the proposed distribution still meets the             */
  2644. /*        "qualifying" requirements, determine whether or not      */
  2645. /*        written permission is still required; if the proposed    */
  2646. /*        distribution lies outside the qualifying requirements,   */
  2647. /*        determine whether or not the distribution is still       */
  2648. /*        possible given written permission.  If either of these   */
  2649. /*        conditions applies and the distributor has not           */
  2650. /*        indicated that s/he has written permission, report the   */
  2651. /*        requirement for written permission.                      */
  2652. /*                                                                 */
  2653. /*     5. In addition to any unsatisfied conditions reported as a  */
  2654. /*        result of the preceding steps, report any additional     */
  2655. /*        author conditions (e.g., notification required) that     */
  2656. /*        cannot be seen to be inapplicable based on the explicit  */
  2657. /*        statements by the distributor.                           */
  2658. /*-----------------------------------------------------------------*/
  2659.  
  2660. /*------------------------------- verification of information -----*/
  2661. /*  Any tool that creates VENDINFO records is required to provide  */
  2662. /*  an active verification mechanism which gives feedback to the   */
  2663. /*  author about the choices selected, and provides an opportunity */
  2664. /*  to notice unintended choices or consequences.  This feature is */
  2665. /*  intended to increase the confidence with which a distributor   */
  2666. /*  can use the resulting VENDINFO information, and to reduce      */
  2667. /*  errors by authors.  This mechanism may take various forms:     */
  2668. /*  verification step in an interactive editor, a batch procedure  */
  2669. /*  that prints out the file contents and is well documented and   */
  2670. /*  recommended so the author is aware of the need to perform it,  */
  2671. /*  etc.                                                           */
  2672. /*-----------------------------------------------------------------*/
  2673.  
  2674.           /*  Standards Applicable to Programs (cont.) */
  2675.  
  2676. /*---------------------------------- authentication of record -----*/
  2677. /*  Any tool that processes VENDINFO records is required to test   */
  2678. /*  the records for correct CRC values, authenticity, etc., and to */
  2679. /*  report failures in a detectable way, unless the user has       */
  2680. /*  explicitly chosen to suppress such testing.                    */
  2681. /*-----------------------------------------------------------------*/
  2682.  
  2683. /*------------------------------------- other tools standards -----*/
  2684. /*  Standards for tools are also mentioned here and there through- */
  2685. /*  out the file-format portion of this standard.                  */
  2686. /*-----------------------------------------------------------------*/
  2687. 
  2688.